質問

プロジェクトでXerces-cを使用していますが、まったく新しい DOMDocument を作成せずに、単一の DOMElement を作成したいと思います。そのようなことは可能ですか?

役に立ちましたか?

解決

方法がわかりません。私の知る限り、DOMDocumentは「メモリプール」として機能します。すべての要素がこのプールに作成されます。 Xerces ドキュメントには次のように表示されます:

  

DOMDocument :: createXXXXによって作成されたオブジェクト   ユーザーはrelease()関数を呼び出して、孤立したノードのリリースを示すことができます。孤立ノードが解放されると、それに関連する子も解放されます。リリースされたノードにアクセスすると、予期しない動作が発生します。これらの孤立したノードは、所有者ドキュメントがリリースされたときに、まだリリースされていない場合、最終的にリリースされます

この状況を回避するには、スクラッチパッド DOMDocumentを保持し、それを使用してフラグメントまたは孤立ノードを作成し、準備ができたらそれらを宛先ドキュメントに採用します。例:

// Create a fragment holding two sibling elements. The first element also has a child.
DOMDocumentFragment* frag = scratchDom->createDocumentFragment();
DOMNode* e1 = frag->appendChild( frag->getOwnerDocument()->createElement("e1") );
e1->appendChild( e1->getOwnerDocument()->createElement("e1-1") );
DOMNode* e2 = frag->appendChild( frag->getOwnerDocument()->createElement("e2") );
...
// Paste the contents of the fragment into a "parent" node from another document
DOMNode* parentFromOtherDom = ...;
parentFromOtherDom->appendChild( parentFromOtherDom->getOwnerDocument()->adopt(frag) );
scratchDom->removeChild(frag);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top