0

DOM を使用して Java オブジェクトを xml ファイルにシリアライズすると、要素をコピーしようとしたときに問題が発生しました。

2 つの xml ファイルを生成したいと思います。最初のファイルには子要素が 1 つだけ含まれており、2 つ目のファイルには 2 つの子要素が含まれています (実際には要素のコピーを作成します)。

したがって、xml ファイルは次のようになります。

1.xml
<fruit>
    <apple name="XXX"/>
</fruit>

2.xml
<fruit>
    <apple name="XXX"/>
    <apple name="XXX"/>
</fruit> 

"times" という変数を使用して 2 つのファイルを一度に生成して制御します。私のコードは次のようなものです: public void static main(String[] args) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = factory.newDocumentBuilder(); ドキュメント doc = docBuilder.newDocument();

    // create the fruit element
    Element fruit = doc.createElement("fruit");
    doc.appendChild(fruit);

    int times = 2;

    Element fruitCopy = (Element)fruit.cloneChild(true);
    for(int i=1; i<=times; i++) {
        fruit = createApples(doc, fruitCopy, i);
        System.out.println(fruitCopy.getChildNodes().getLength());
        // write the output xml file
        ......
    }
}

public Element static createApples(Document doc, Element fruit, int noOfCopies)  {
    for(int j=0; j < noOfCopies; j++) {
        // create apple element
        Element apple = doc.createElement("apple");  
        apple.setAttribute("name",Apple.getName());
        // set other attributes
        ....

        fruit.appendChild(apple);
    }

    return fruit;
}

印刷行の出力は次のとおりです。

0
2

しかし、果物コピーを createApple メソッドに渡すときは常に空にしたいと思います.....したがって、必要な印刷行の出力は次のようになります。

0
0

DOM API を検索したところ、clondNode() メソッドは、複製された不変要素から可変要素を作成すると書かれています。つまり、元の「果物」が変更されている限り、「fruitCopy」も変更されるということですか?

ありがとうございました!!!!!

4

0 に答える 0