这是我的代码:
private NodeList union(NodeList left, NodeList right){
NodeList result=null;
try{
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true); // never forget this!
DocumentBuilder newBuilder = domFactory.newDocumentBuilder();
Document newDoc = newBuilder.newDocument();
Element root = newDoc.createElement("root");
newDoc.appendChild(root);
if(left!=null){
for(int i=0;i<left.getLength();i++){
Node tmp=(Node)left.item(i).cloneNode(true);
newDoc.adoptNode(tmp);
newDoc.getDocumentElement().appendChild(tmp);
//root.appendChild(newDoc.importNode((Node)left.item(i), true));
}
}
if(right!=null){
for(int i=0;i<right.getLength();i++){
Node tmp=(Node)right.item(i).cloneNode(true);
newDoc.adoptNode(tmp);
newDoc.getDocumentElement().appendChild(tmp);
//root.appendChild(newDoc.importNode((Node)right.item(i), true));
}
}
result=root.getChildNodes();
} catch(ParserConfigurationException e){
System.err.println(e);
}
return result;
}
在这段代码中,我试图将两个NodeList合二为一。
它运行良好,除了在联合之后,节点丢失了它们的父,祖先,兄弟之类等的上下文...所以如果我试图对结果运行求值并使用parent / ansector /结果上的previous-sibling / etc轴,它失败了。
我应该怎么做才能让它们失去它?
感谢。
答案 0 :(得分:1)
节点只能存在于一个文档中。如果您希望复制的节点位于两个文档中,那么运气不佳。您只能在目标文档中创建新节点,并将子节点和属性从旧节点移动到新节点。查看Document :: adoptNode(Node)可能是最简单的方法。