0

これが私のコードです:

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;
}

このコードでは、2 つの NodeList を 1 つに統合しようとしています。

結合後、ノードは親、先祖、前の兄弟などのコンテキストを失うという事実を除いて、うまく機能します...したがって、結果に対して評価を実行し、親/アンセクター/前の兄弟を使用しようとしている場合結果の /etc 軸、失敗します。

彼らがそれを失わないようにするにはどうすればよいですか?

ありがとう。

4

1 に答える 1

1

ノードは 1 つのドキュメントにのみ存在できます。コピーしたノードを両方のドキュメントに含めたい場合は、運が悪いです。ターゲット ドキュメントに新しいノードを作成し、子と属性を古いノードから新しいノードに移動することしかできません。これを行う最も簡単な方法については、Document::adoptNode(Node) を参照してください。

于 2013-05-18T23:14:17.370 に答える