19

我正在尝试创建一个新的 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]);
4

2 回答 2

42

为class定义了一个复制构造函数XDocument

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();

nameis"Test2"name2is ,所做的更改不会影响"Test"的证明。docdoc2

于 2013-04-03T08:58:15.413 回答
4

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

var newDoc = new XDocument(xml);

来自MSDN

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

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

于 2013-04-03T08:59:01.637 回答