简体   繁体   English

如何将 XML 子节点添加到多个父节点

[英]How to add XML child nodes to multiple parent nodes

I have an xml file like this.我有一个这样的xml文件。

<ArrayOfALternateUnitModel>
<ALternateUnitModel>
<UnitId>1048</UnitId>
<Name> CARTON</Name>
</ALternateUnitModel>

<ALternateUnitModel>
<UnitId>2063</UnitId>
<Name> PACKET</Name>
</ALternateUnitModel>
</ArrayOfALternateUnitModel>

what i need is.我需要的是。

<ArrayOfALternateUnitModel>
<ALternateUnitModel>
<UnitId>1048</UnitId>
<Name> CARTON</Name>
<NewChild>new child</NewChild>
</ALternateUnitModel>

<ALternateUnitModel>
<UnitId>2063</UnitId>
<Name> PACKET</Name>
<NewChild>new child</NewChild>
</ALternateUnitModel>
</ArrayOfALternateUnitModel>

My code looks like this.我的代码看起来像这样。

xmlDoc.Load(xmlStream);
XmlElement childElement = xmlDoc.CreateElement("NewChild");
childElement.InnerText = "new child";
XmlNode parentNode = xmlDoc.SelectSingleNode("ArrayOfALternateUnitModel/ALternateUnitModel");
parentNode.AppendChild(childElement);

Output goes like this.输出是这样的。

<ArrayOfALternateUnitModel>
<ALternateUnitModel>
<UnitId>1048</UnitId>
<Name> CARTON</Name>
<NewChild>new child</NewChild>
</ALternateUnitModel>

<ALternateUnitModel>
<UnitId>2063</UnitId>
<Name> PACKET</Name>
</ALternateUnitModel>
</ArrayOfALternateUnitModel>

In the second node its not adding child nodes.在第二个节点中,它没有添加子节点。 How to add child to all parent nodes?如何将子节点添加到所有父节点?

You take only one first node, so you can try to change these lines:您只需要一个第一个节点,因此您可以尝试更改这些行:

XmlNode parentNode = xmlDoc.SelectSingleNode("ArrayOfALternateUnitModel/ALternateUnitModel");
parentNode.AppendChild(childElement);

On

XmlNodeList parentNodes = xmlDoc.SelectNodes("ArrayOfALternateUnitModel/ALternateUnitModel");
foreach (XmlNode parentNode in parentNodes)
    parentNode.AppendChild(childElement);

Two problems:两个问题:

  • You cannot append a single element to multiple parents.您不能将单个元素附加到多个父元素。 An element can only have one parent.一个元素只能有一个父元素。
  • You need to select all the target elements, not just one.您需要选择所有目标元素,而不仅仅是一个。

This should work:这应该有效:

xmlDoc.Load(xmlStream);
foreach (XmlNode parent in xmlDoc.SelectNodes("ArrayOfALternateUnitModel/ALternateUnitModel"))
{
    XmlElement childElement = xmlDoc.CreateElement("NewChild");
    childElement.InnerText = "new child";

    parent.AppendChild(childElement);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM