使用 "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");
我基本上是在尝试在现有节点之后添加我创建的节点。在这里,我有一个父节点列表 (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");