Чтобы удалить все элементы, содержащиеся в removeNodeList, из xml-документа:
Поскольку узел также удаляется из removeNodeList
, следующий удаляемый узел находится в индексе 0 в removeNodeList
, пока список не станет пустым (removeNodeList.getLength() == 0
).
while(removeNodeList.getLength() > 0) {
rootElement.removeChild(removeNodeList.item(0));
}
Это работает, только если каждый узел "server1"
является дочерним по отношению к узлу "start"
. Если XML-файл будет содержать "server1"
узлов в качестве дочерних узлов узла, отличного от узла rootElement
("начало"), будет выдано исключение DOMException, поскольку удаляемый узел не является дочерним элементом узла rootElement
.
Например:
<category name="server1"/>
<category name="server2"/>
<server1 name="serverName1" value="serverValue"/>
<other>
<server1 name="serverName1" value="serverValue"/>
</other>
<server2 name="serverName2" value="serverValue"/>
To handle this case get the parent node of the item to remove:
while(removeNodeList.getLength() > 0) {
Node itemToRemove = removeNodeList.item(0);
itemToRemove.getParentNode().removeChild(itemToRemove);
}
Чтобы удалить элементы условно, например, на основе значения какого-либо атрибута:
Узел будет удален, только если метод shouldRemoveNode()
вернет true. Если false, узел остается в документе, а removeNodeList
следующий узел, который (возможно) удаляется, находится в индексе = текущий индекс + 1
notRemovedCnt
— это как количество не удаленных узлов, так и индекс следующего элемента, который нужно проверить, если он должен быть удален до тех пор, пока removeNodeList
длина и notRemoveCnt
не сравняются, что означает, что в списке больше нет элементов для удаления.
int notRemovedCnt = 0;
while(removeNodeList.getLength() > notRemovedCnt) {
Node itemToRemove = removeNodeList.item(notRemovedCnt);
if (shouldRemoveNode(itemToRemove)) {
itemToRemove.getParentNode().removeChild(itemToRemove);
} else {
notRemovedCnt++;
}
}
person
azb
schedule
16.06.2019
NodeList
является динамическим, и удаление элемента обновляет (уменьшает) длину, в результате чего ваше условие цикла оценивается только как истинное в первый раз. Это в первую очередь основано на том, как они работают в JavaScript, хотя у меня нет опыта работы с XML-документами в Java. - person Anthony Grist   schedule 06.02.2014NodeList
, его 2 до того, как он уменьшился до 1. - person Vishrant   schedule 06.02.2014