2012-02-17 15 views
3

XmlDocumentを読み込み、XmlNodeListインスタンスにいくつかのノードを選択します。私はこれらのノードのいずれかを編集する場合は、XmlDocumentオブジェクトはC#でXmlNodeListを複製したり、別のコピーを作成する方法はありますか?

XmlDocument xd = loadXml(); 
XmlNodeList xnl = xd.SelectNodes("/root/nodes"); 

foreach (XmlNode n in xnl) 
{ 
    n.InnerText = ""; 
} 

に変更されますので、私はいるXmlNodeListを修正することを理解- ノードリストがから取られたことをXmlDocumentオブジェクトを変更します。

ノードリストの別のXmlElementに深いコピーを作成する方法がありますか(私はそうだと思います)、これらのノードを変更すると、コピー元の元の場所から独立します?

+1

http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.clone.aspx([ 'XmlNode'の'クローン() 'メソッド]を見てみましょう)。ノードのディープコピーを行います。すでにループがあるので、これはあまり難しくありません。 – Tomalak

+1

Clone()とは別に、Xml型は常に複製が容易です。つまり、(Memory)ストリームへの書き込みと読み込みです。 –

答えて

3

xml catをスキンする方法は複数あります。これはただのものです。

var xd = new XmlDocument(); 
    xd.LoadXml("<root><nodes><node>1</node><node>2</node></nodes></root>"); 
    var xnl = xd.SelectSingleNode("/root/nodes").Clone(); 

    foreach (XmlNode n in xnl) 
    { 
     n.InnerText = "x"; 
    } 

    Console.Out.WriteLine(xd.OuterXml); 
    Console.Out.WriteLine("--------------"); 
    Console.Out.WriteLine(xnl.OuterXml); 
1

.CloneNodeを使用して独自のコピーを作成する必要があります。 MSDNに例があります。