XmlNodeListのコピー作成 への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 ゆぅ  (社会人) 投稿日時 2009/12/19 00:45:10
魔界の仮面弁士さん

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

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

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

ありがとうございました。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 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/15 20:36:54
お世話になっております。

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

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