xerces-cドメレメントをxerces-c domdocumentから別のdomelementを取り付ける
質問
rapidxmlでの同様の問題について以前に質問しました。今、同じことがxerces-cを使用していることを知りたいです。
XMLを解析する必要があるC ++アプリケーションに取り組んでいます。
以下を検討してください。
XMLファイル:file1.xml
<root>
<node1>value1</node1>
<node2>value2</node2>
</root>
XMLファイル:file2.xml
<anotherroot>
<anothernode1>anothervalue1</anothernode1>
<anothernode2>anothervalue2</anothernode2>
</anotherroot>
私のCPPファイル
using namespace xercesc;
// First tree
XercesDOMParser* parser1 = new XercesDOMParser();
parser1->parse("file1.xml"); // Loading xml and building tree (XercesDOMParser owns the document)
DOMDocument* doc1 = parser1->getDocument();
DOMElement* el1 = doc1->getDocumentElement(); // Getting root
// Second tree
XercesDOMParser* parser2 = new XercesDOMParser();
parser2->parse("file2.xml"); // Loading xml and building tree (XercesDOMParser owns the document)
DOMDocument* doc2 = parser2->getDocument();
DOMElement* el2 = doc2->getDocumentElement(); // Getting root
これをやりたい:
el2->appendChild(el1);
ドキュメントDOC2の最終XMLは
<anotherroot>
<anothernode1>anothervalue1</anothernode1>
<anothernode2>anothervalue2</anothernode2>
<root>
<node1>value1</node1>
<node2>value2</node2>
</root>
</anotherroot>
しかし、そうするとき、私は得る:
'xercesc_3_1 :: domexception' abortedのインスタンスを投げた後に呼び出された終了
なぜなら私は推測します 私が取り付けたい要素は別の木に属します. 。どうすればこの結果を達成できますか?問題は、基本的に、XMLセグメントを含むツリーと文字列があることです。文字列を解析する必要がありますXMLを表すDOMオブジェクトを取得し、他のツリーのノードに接続する必要があります。最も重要なことは、内部にXMLが付いた文字列があることです...この重要な要件をバイパスすることはできません。文字列から、DOMを取得して接続します。それは不可能なことのようです...可能ですか?
これどうやってするの??? Xerces-Cプログラマーがそのようなシナリオを決して考えず、そのような解決策を達成するための合理的な機能を提供しなかったという事実を本当に受け入れることはできません。
ノードの所有権を変更する方法があるかどうかをコールトしても、それだけで十分でしょう。ご存知のように、私が以前に試したことが実行されたときに掲載される誤った_document_errがあります。まあ、図書館が別のドキュメントに属するようにノードの所有権を変更する方法を提供した場合、私は大丈夫で、私の問題は解決します!
ありがとうございました
解決
domdocument :: ImportNode aです DOMレベル2関数 これは、この正確な問題を解決するように設計されています。
DOMElement * el1Imported = doc2->importNode(el1, true);
el2->appendChild(el1Imported); // element is now in right document