遍历XML节点,添加和删除一些

问题描述 投票:-1回答:1

我有一个XML文档,在迭代过程中需要在其中添加和删除一些节点。但是,如果我这样添加节点,则其他节点将根据InsertAfterRemoveChild进行移动。因此,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);
    }
}
c# xml
1个回答
0
投票

我已经找到了解决方案。我创建了两个队列

NodesToRemove = new Queue<OpenXmlElement>();
NodesToInsert = new Queue<Tuple<OpenXmlElement, OpenXmlElement, InsertMode>>();

并且在处理主文档后,我遍历队列并进行添加/删除操作

© www.soinside.com 2019 - 2024. All rights reserved.