Я использую PHP DOMDocument и связанные с ним классы для работы с XML.XML содержит инструкции по обработке, которые должны обрабатываться в определенном порядке, сверху вниз, от глубины к глубине.
Я использую рекурсивную функцию, которая принимает весь DOMDocument, а затем вызывает себя foreach
дочерний узел, все пути вниз.
Мне нужно удалить некоторые из этих дочерних узлов после их обработки.Проблема заключается в том, что как только дочерний узел удаляется, кажется, что foreach
«не в порядке», и я больше не могу удалить дочерние узлы.
Пример XML-документа:
<root id="1">
<instruction id="2">
<inner id="3"/>
</instruction>
<instruction id="4">
<inner id="5"/>
</instruction>
</root>
Мне нужно сначала обработать inner[@id=3]
, а затем удалить его.Затем мне нужно обработать instruction[id=2]
и удалить его.До этого момента все в порядке.
Далее мне нужно обработать inner[@id=5]
и удалить его.Я могу читать / обрабатывать это нормально, но когда я пытаюсь удалить это:
$parentNode=$inner->parentNode;
$parentNode->removeChild($inner);
Ничего не происходит.Похоже, что удаление первого узла инструкции привело к тому, что PHP запутался в том, какие элементы содержатся в документе.
Я знаю, что можно обрабатывать XML снизу вверх и удалять все узлы в этом порядке,но у меня есть конкретная потребность перейти сверху вниз.
Еще одна часть информации здесь - я также добавляю некоторые новые узлы в документ при обработке его, на случай, если это изменит мои параметры.
Что мне нужно сделать, чтобы это заработало?