我基本上是在尝试添加我在现有节点之后创建的节点。在这里,我有一个父节点(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");
答案 0 :(得分:0)
原因是您要插入创建的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");