我需要在元素“ ID”之后的每个父节点“ Emp”中添加一个新元素“ Location”。
<Record>
<Emp>
<ID>12</ID>
<Name>ABC</Name>
</Emp>
<Emp>
<ID>12</ID>
<Name>ABC</Name>
</Emp>
</Record>
我按照示例和以下由Erik Philips回答的步骤
Add an XML node to multiple parent nodes(which have same name)
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);
代替此
item.AppendChild(xNewChild);
我添加了新的声明
item.InsertAfter(xNewChild, doc.SelectSingleNode("Emp//ID"));
这将在Emp节点启动之后而不是ID后面插入新元素。
<Record>
<Emp>
<Location>USA</Location>
<ID>12</ID>
<Name>ABC</Name>
</Emp>
<Emp>
<Location>USA</Location>
<ID>12</ID>
<Name>ABC</Name>
</Emp>
</Record>
谁能建议我我要去哪里错了?
答案 0 :(得分:1)
XmlDocument
是一个旧的API,并已由XDocument
取代,它在处理XML时提供了更愉悦的体验。
使用XDocument
,您可以:
var doc = XDocument.Parse(xmlString); //acquire your XDocument (perhaps by other means)
var targetElements = doc.XPathSelectElements("//Record/Emp/ID");
foreach (var element in targetElements)
{
var locationElement = new XElement("Location");
locationElement.Add("USA");
element.AddAfterSelf(locationElement);
}