如何获得XDocument的独立副本?

时间:2013-04-03 08:57:03

标签: c# xml linq-to-xml

我正在尝试按如下方式创建一个新的XDocument:

var xmlString = _documentDictionary[documentKey].ToString(SaveOptions.DisableFormatting);

XDocument xml = XDocument.Parse(xmlString);

我现在拥有xml,但我会拥有一个独立的文档实例,因为我从原始文档中提取了字符串并从中创建了一个新字符串。

但是,当我修改xml然后检查_documentDictionary[documentKey]时,我可以看到原始文档也已被修改。

如何从我现有的收藏品中获取新的独立文件?

注意:

我已尝试过这些,但它不起作用:

var xmlString = _documentDictionary[documentKey].ToString(SaveOptions.DisableFormatting);
var copyDoc = new XDocument(xmlString);

var copyDoc = new XDocument(_documentDictionary[documentKey]);

2 个答案:

答案 0 :(得分:30)

有一个copy constructor defined for XDocument class

var newDoc = new XDocument(xml);
  

使用此构造函数制作XDocument的深层副本。

     

此构造函数遍历文档中的所有节点和属性   在另一个参数中指定,并创建所有节点的副本   它组装了新初始化的XDocument。

快速测试

var doc = new XDocument(new XElement("Test"));
var doc2 = new XDocument(doc);

doc.Root.Name = "Test2";

string name = doc.Root.Name.ToString();
string name2 = doc2.Root.Name.ToString();

name"Test2"name2"Test",证明doc所做的更改不会影响doc2

答案 1 :(得分:4)

尝试复制构造函数,例如;

var newDoc = new XDocument(xml);

来自 MSDN

  

您使用此构造函数制作XDocument的深副本

     

此构造函数遍历文档中的所有节点和属性   在另一个参数中指定,并创建所有节点的副本   它组装了新初始化的XDocument。