XmlNodeListのコピー作成

タグの編集
投稿者 ゆぅ  (社会人) 投稿日時 2009/12/15 20:36:54
お世話になっております。

題名の通りですが、XmlNodeListの作成方法をご存知の方いらっしゃいましたら教えてください。

XmlNodeList一つひとつのitemのコピーを作成してappendChildする方法しか思いつきません。
これ以外の方法をご存知の方いらっしゃいましたらよろしくお願いします。

投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/12/15 21:00:11
どういう状況で使いたいのでしょうか?

XmlNodeList は特定の要素のコピーと言うわけではなく、 "live" なコレクションです。
各要素に対する変更がダイレクトに伝えられるようになっています。

Dim d As New XmlDocument()
d.LoadXml("<a><b/><c/><d/></a>")

Dim z As XmlNodeList = d.DocumentElement.ChildNodes
MsgBox(z.Count) 'b,c,d の3個 

d.DocumentElement.AppendChild(d.CreateElement("e"))
MsgBox(z.Count) 'b,c,d,e の4個 

d.DocumentElement.InnerXml = ""
MsgBox(z.Count) '0個 



そのため、単純にコピーすると、それはただの参照コピーとなり、複製とはなりません。

それぞれノードは、ParentNode や NextSibling プロパティを通じて、親兄弟の要素を
辿れるようになっている事もあり、複製を作るのであれば、その親オブジェクトも含め、
どこまでの範囲を複製するのかを定めて置く必要があるでしょう。
投稿者 ゆぅ  (社会人) 投稿日時 2009/12/19 00:45:10
魔界の仮面弁士さん

ご回答ありがとうございました。
お礼が遅くなってしまい、大変申し訳ございません。

親兄弟は考慮しません。
XmlNodeListの参照コピーがあれば十分でした。

しかし、今回はコピーを作成しない方法で希望通りのモノが実装できました。
今後機会があれば今回の質問回答を活かしたいと思います。

ありがとうございました。