我正在寻找一种使用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));
}
}
}
我只对替换节点名而不是它的值感兴趣。
答案 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接口实现。