将元素添加到xml文件中特定位置的多个父节点

时间:2018-09-25 09:43:51

标签: c#

我需要在元素“ 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>

谁能建议我我要去哪里错了?

1 个答案:

答案 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);
}