Как я могу рекурсивно удалить каждый четный узел (2-й, 4-й, 6-й ...) из XML-файла, используя Java? - PullRequest
0 голосов
/ 24 января 2019

Я использую модель 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);
        }
    }

Спасибо за любую помощь

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