我有一个XML文档,在迭代过程中需要在其中添加和删除一些节点。但是,如果我这样添加节点,则其他节点将根据InsertAfter
或RemoveChild
进行移动。因此,xNode.ChildNodes[i]
将指向错误的节点。当然,我可以添加或减去计数器,但是我认为这不是最好的方法。我应该怎么做?
void Init()
{
XmlDocument doc = LoadDocument("test.xml");
RecursiveProcess(doc);
}
void RecursiveProcess(XmlNode xNode)
{
for(int i = 0; i < node.ChildNodes.Count; i++)
{
XmlElement node = xNode.ChildNodes[i] as XmlElement;
if(/*some condition*/)
{
var x = Document.CreateElement("newNode");
node.ParentNode.InsertAfter(x, node);
}
else if(...)
{
var x = Document.CreateElement("anotherNode");
node.ParentNode.RemoveChild(node);
}
RecursiveProcess(node);
}
}
我已经找到了解决方案。我创建了两个队列
NodesToRemove = new Queue<OpenXmlElement>();
NodesToInsert = new Queue<Tuple<OpenXmlElement, OpenXmlElement, InsertMode>>();
并且在处理主文档后,我遍历队列并进行添加/删除操作