我正在尝试将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文件中,我看到了这种奇怪的行为。
答案 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);