是否可以重新加载XDocument并保留所有现有的引用?

时间:2012-12-20 19:21:51

标签: c# linq-to-xml

我已经通过XDocument的静态Load方法创建了一个XDocument(采用XmlReader),如下所示:

XDocument doc;

doc = XDocument.Load(reader);

现在,有必要重新加载文档(在更改后恢复到原始版本)。显而易见的方法似乎是doc = XDocument.Load(reader);。但是,这将创建一个新的XDocument,并且对doc的任何现有引用仍将指向旧的(更改的)版本,尽管我们已经(重新)加载了原始文件。

有没有办法将XmlReader(甚至XML的字符串或byte []表示)加载到现有的XDocument中,覆盖内容?或者我是否必须手动进行所有更改(删除其元素并添加新元素)?

2 个答案:

答案 0 :(得分:3)

您可以替换XDocument

的根
var oldDoc = new XDocument();
oldDoc.Add(new XElement("OldRoot"));
var newDoc = new XDocument();
newDoc.Add(new XElement("NewRoot"));
oldDoc.Root.ReplaceWith(newDoc.Root);

答案 1 :(得分:2)

你应该能够做到

 doc.Root.ReplaceWith( XElement.Load(fileName));

如果要保留处理指令,可能需要首先加载到临时XDocument中。