水無月ばけらのえび日記

bakera.jp > 水無月ばけらのえび日記 > 2008年のえび日記 > 2008年1月 > 2008年1月7日(月曜日)

2008年1月7日(月曜日)

DocumentFragment の CloneNode()

DocumentFragment の CloneNode(true) でハマったのでメモ。DOM1 の仕様 (www.w3.org)を見ると、DocumentFragment には以下のような性質があります。

When a DocumentFragment is inserted into a Document (or indeed any other Node that may take children) the children of the DocumentFragment and not the DocumentFragment itself are inserted into the Node.

以上、Document Object Model (Core) Level 1 : Interface DocumentFragment より

DocumentFragment をドキュメントに挿入すると、DocumentFragment の子ノードだけが挿入され、DocumentFragment 自身は挿入されずに独り(?)残されるという仕様になっています。AppendChild すると DocumentFragment は空っぽになってしまうので、その後で CloneNode(true) しても、空の DocumentFragment しか得られません。

たいていのノードは AppendChild した後でも CloneNode(true) でコピーが得られるのですが、DocumentFragment だけは AppendChild する前にコピーしておかないと駄目ということです。

※あるメソッドが XmlElement ではなく XmlDocumentFragment を返すように修整したら動かなくなってしまい、結構はまりました……。

関連する話題: XML / プログラミング / 失敗談

最近の日記

関わった本など