在Java中搜索和替换DOM元素

时间:2009-09-16 14:27:14

标签: java dom tree replace

我正在寻找一种使用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 个答案:

答案 0 :(得分:2)

要重命名节点,不需要使用searchReplace()方法(因为您已经有相关的节点),只需在相关renameNode()上调用Document即可。例如

document.renameNode(node, null, "new name");

答案 1 :(得分:1)

要替换Element,您可以使用Node#replaceChild()。例如,要将current替换为y,您将使用

current.getParentNode().replaceChild(y, current)

答案 2 :(得分:1)

使用XPath类搜索DOM。有关用法的理解,请参阅此simple example

答案 3 :(得分:0)

也许它可以使用包装器api,例如JDom,但即使这样,我也不确定是否会保留子元素顺序(doublefull)。您可能正在考虑滚动自己的DOM接口实现。