2012-02-17 71 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

看一看的['XmlNode'的'克隆()'方法](http://msdn.microsoft.com/en-us/library/system.xml.xmlnode.clone.aspx )。它可以深层复制节点。你已经有了循环,所以这应该不是那么难。 – Tomalak 2012-02-17 21:29:10

+1

除了克隆(),Xml类型总是很容易复制:写入和读取(内存)流。 – 2012-02-17 21:31:54

回答

3

皮肤xml猫有多种方法。这只是一个。

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有一个例子。

相关问题