将XML节点添加到多个父节点(具有相同名称)

时间:2012-10-22 20:31:31

标签: c# .net xml

我正在尝试将XML节点添加到多个父节点(具有相同名称)。但它只是添加到XML的Last节点而不是全部。

输入XML

<Record>
 <Emp>
  <ID>12</ID>
  <Name>ABC</Name>
 </Emp>
 <Emp>
  <ID>12</ID>
  <Name>ABC</Name>
 </Emp>
</Record>

我想将Location元素添加到每个Emp节点。我的代码如下:

XmlNodeList xNodeList = doc.SelectNodes("/Record/Emp");
XmlElement xNewChild = doc.CreateElement("Location");
        xNewChild.InnerText = "USA";
        foreach (XmlNode item in xNodeList)
        {
            item.AppendChild(xNewChild);
        }
doc.Save(path);

但是我得到这样的输出:

 <Record>
 <Emp>
  <ID>12</ID>
  <Name>ABC</Name>
 </Emp>
 <Emp>
  <ID>12</ID>
  <Name>ABC</Name>
  <Location>USA</Location>
 </Emp>
</Record>

尚未将Location元素添加到第一个Emp节点。

注意:调试后,我能够发现即使是第一个Emp节点也添加了元素。但是,在保存的XML文件中,我看到了这种奇怪的行为。

1 个答案:

答案 0 :(得分:1)

您的xNewChild是一个新元素。只需将其添加到多个节点,只会序列化到最后一个节点。这样的改变应该有效:

XmlNodeList xNodeList = doc.SelectNodes("/Record/Emp");
foreach (XmlNode item in xNodeList)
{
  XmlElement xNewChild = doc.CreateElement("Location");
  xNewChild.InnerText = "USA";
  item.AppendChild(xNewChild);
}
doc.Save(path);