Итерация по XML узлам, добавление и удаление некоторых - PullRequest
0 голосов
/ 15 марта 2020

У меня есть 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);
    }
}

1 Ответ

0 голосов
/ 17 марта 2020

Я нашел решение. Я создал две очереди

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

И после обработки основного документа я перебираю очереди и выполняю операции добавления / удаления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...