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」も変更されるということですか?
ありがとうございました!!!!!