【问题标题】:Not able to properly save changes to XML document when using "InsertAfter"使用“InsertAfter”时无法正确保存对 XML 文档的更改
【发布时间】:2017-08-23 02:26:19
【问题描述】:

我基本上是在尝试在现有节点之后添加我创建的节点。在这里,我有一个父节点 (Tag) 的列表和一个子节点 (Name) 的列表。我想在子节点之后添加我创建的节点。 我已经逐步完成了每次迭代,并且每次迭代都进行了正确的更改,但是在进行下一次迭代时它没有正确保存。

输入.xml

<Tag><Name>NAME 1</Name></Tag>
<Tag><Name>NAME 2</Name></Tag>
<Tag><Name>NAME 3</Name></Tag>

输出.xml

<Tag><Name>NAME 1</Name></Tag>
<Tag><Name>NAME 2</Name></Tag>
<Tag><Name>NAME 3</Name><Node>Node Inner Text</Node></Tag>

目标

<Tag><Name>NAME 1</Name><Node>Node Inner Text</Node></Tag>
<Tag><Name>NAME 2</Name><Node>Node Inner Text</Node></Tag>
<Tag><Name>NAME 3</Name><Node>Node Inner Text</Node></Tag>

代码

XmlDocument xmlDoc = new XmlDocument(); // Create an XML document object
xmlDoc.Load("test.xml"); // Load the XML document from the specified file

XmlNodeList NameList = xmlDoc.SelectNodes("//Tag/Name");
XmlNodeList TagList = xmlDoc.SelectNodes("//Tag");

//create ---> <Node>Node Inner Text</Node>
XmlNode NodeToAdd = xmlDoc.CreateElement("Node");
NodeToAdd.InnerText = "Node Inner Text";

for (int i = 0; i < TagList.Count; i++)
{
    TagList[i].InsertAfter(NodeToAdd, NameList[i]);
}
xmlDoc.Save("output.xml");

【问题讨论】:

    标签: c# xml xmldocument


    【解决方案1】:

    原因是您插入了相同的已创建 XmlNode 实例。
    所以InsertAfter 方法会将存在的节点从上一个&lt;Tag&gt; 节点移动到下一个。

    您可以在循环内创建新节点,然后您将获得预期的输出

    for (int i = 0; i < TagList.Count; i++)
    {
        XmlNode NodeToAdd = xmlDoc.CreateElement("Node");
        NodeToAdd.InnerText = "Node Inner Text";
    
        TagList[i].InsertAfter(NodeToAdd, NameList[i]);
    }
    
    xmlDoc.Save("output.xml");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2016-08-09
      • 2015-04-05
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多