使用 "InsertAfter" 时无法正确保存对 XML 文档的更改

Not able to properly save changes to XML document when using "InsertAfter"

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

input.xml

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

output.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");

原因是您要插入已创建 XmlNode.
的相同实例 因此 InsertAfter 方法会将现有节点从前一个 <Tag> 节点移动到下一个

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

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");