作成した 2 つの XML ドキュメントがあり、これら 2 つを新しいエンベロープ内で結合したいと考えています。ので、私は持っています
<alert-set>
<warning>National Weather Service...</warning>
<start-date>5/19/2009</start-date>
<end-date>5/19/2009</end-date>
</alert-set>
と
<weather-set>
<chance-of-rain type="percent">31</chance-of-rain>
<conditions>Partly Cloudy</conditions>
<temperature type="Fahrenheit">78</temperature>
</weather-set>
私がやりたいのは、ルート ノード内で 2 つを結合することです。
一時的なドキュメントを作成し、子をドキュメントのルート ノードに置き換えてみました。
<DataSet>
<blank/>
<blank/>
</DataSet>
そして、2 つの空白を 2 つのドキュメントのルート要素に置き換えたいと思っていましたが、「WRONG_DOCUMENT_ERR: ノードは、それを作成したドキュメントとは別のドキュメントで使用されています。」というメッセージが表示されます。ルート ノードを採用してインポートしようとしましたが、同じエラーが発生します。
ノードごとに新しい要素を読んで作成することなく、ドキュメントを結合する簡単な方法はありませんか?
編集: サンプル コード スニペット 1 つを「空白の」ドキュメントに移動しようとしているだけです... importNode および adaptNode 関数はドキュメント ノードをインポート/採用できませんが、要素ノードとそのサブツリーをインポートできません... またはそれは、まだ追加/置換には機能していないようです。
Document xmlDoc; //created elsewhere
Document weather = getWeather(latitude, longitude);
Element weatherRoot = weather.getDocumentElement();
Node root = xmlDoc.getDocumentElement();
Node adopt = weather.adoptNode(weatherRoot);
Node imported = weather.importNode(weatherRoot, true);
Node child = root.getFirstChild();
root.replaceChild(adopt, child); //initially tried replacing the <blank/> elements
root.replaceChild(imported, child);
root.appendChild(adopt);
root.appendChild(imported);
root.appendChild(adopt.cloneNode(true));
これらはすべて DOMException をスローします: WRONG_DOCUMENT_ERR: ノードは、それを作成したドキュメントとは別のドキュメントで使用されます。
stax の使い方を理解するか、ドキュメントを読み直して新しい要素を作成する必要があると思います。ドキュメントを結合するだけでも、ちょっと大変な作業のように思えます。