【问题标题】:Add element to multiple parent nodes at a specific position in xml file将元素添加到xml文件中特定位置的多个父节点
【发布时间】:2018-09-25 18:12:25
【问题描述】:

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

谁能建议我哪里出错了?

【问题讨论】:

  • 阅读 this 并考虑添加示例 XML 和演示此问题的可运行代码。
  • 谢谢@spender。我已经编辑了问题并添加了更多细节。我希望它看起来不错。

标签: c#


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多