поиск и замена элементов DOM в Java - PullRequest
1 голос
/ 16 сентября 2009

Я ищу способ написать метод поиска и замены, используя W3C DOM для обновления дерева. Я думал о выполнении поиска в ширину, как показано ниже, но не могу придумать, как выполнить замену на месте?

import org.w3c.dom.Node;

private Element tree;

public void searchReplace(Node x, Node y){
    Queue<Node> q = new LinkedList<Node>();
    q.add(tree);
    while (!q.isEmpty()) {
        Node current = q.remove();
        if (current == x){
            // do replacement
        }

        NodeList children = current.getChildNodes();
        for (int i = 0; i < children.getLength(); i++) {
            q.add(children.item(i));
        }
    }
}

Меня интересует только замена имени узла, а не его значения.

Ответы [ 4 ]

2 голосов
/ 19 сентября 2009

Чтобы переименовать узел, нет необходимости в методе searchReplace() (поскольку у вас уже есть рассматриваемый узел), просто вызовите renameNode() для рассматриваемого Document. например.

document.renameNode(node, null, "new name");
1 голос
/ 16 сентября 2009

Чтобы заменить Element, вы можете использовать Node#replaceChild(). Например, чтобы заменить current на y, вы должны использовать

current.getParentNode().replaceChild(y, current)
1 голос
/ 16 сентября 2009

Используйте класс XPath для поиска в DOM. Для понимания использования см. простой пример .

0 голосов
/ 16 сентября 2009

Возможно, это возможно с помощью API-оболочки, такого как JDom, но даже тогда я не уверен, сохранит ли это порядки дочерних элементов (doublefull). Вы потенциально смотрите на развертывание своей собственной реализации интерфейсов DOM.

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