Я использую модель DOM для анализа XML-файла.Мне нужно удалить каждый четный узел (2-й, 4-й, 6-й ...) из файла XML.Удаление должно быть реализовано с помощью рекурсии.
Например, у меня есть XML:
<PHONEBOOK>
<PERSON>
<NAME>Joe Wang</NAME>
<EMAIL>joe@yourserver.com</EMAIL>
<TELEPHONE>202-999-9999</TELEPHONE>
<WEB>www.java2s.com</WEB>
</PERSON>
<PERSON>
<NAME>Karol</NAME>
<EMAIL>karol@yourserver.com</EMAIL>
<TELEPHONE>306-999-9999</TELEPHONE>
<WEB>www.java2s.com</WEB>
</PERSON>
</PHONEBOOK>
После удаления я хочу получить XML следующим образом:
<PHONEBOOK>
<PERSON>
<NAME>Joe Wang</NAME>
... 2nd node was removed ...
<TELEPHONE>202-999-9999</TELEPHONE>
... 4th node was removed ...
</PERSON>
... 2nd node was removed ...
</PHONEBOOK>
IЯ написал метод для посещения всех узлов с помощью рекурсии, но теперь я не знаю, как удалить каждый четный узел в каждом узле
public static void main(String[] args) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setValidating(false);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new FileInputStream(
new File("src/main/resources/inputForDom.xml")));
Node root = doc.getDocumentElement();
doc.normalize();
visit(root);
}
------------
public static void visit(Node node) {
NodeList books = node.getChildNodes();
for (int i = 0; i < books.getLength(); i++) {
Node book = books.item(i);
if (book.getNodeType() == Node.ELEMENT_NODE) {
System.out.println(book.getNodeName());
// Should be something like this for removing node...
//book.getParentNode().removeChild(books.item(?));
}
// recursion
visit(book);
}
}
Спасибо за любую помощь