我已经通过XDocument的静态Load方法创建了一个XDocument(采用XmlReader),如下所示:
XDocument doc;
doc = XDocument.Load(reader);
现在,有必要重新加载文档(在更改后恢复到原始版本)。显而易见的方法似乎是doc = XDocument.Load(reader);
。但是,这将创建一个新的XDocument,并且对doc
的任何现有引用仍将指向旧的(更改的)版本,尽管我们已经(重新)加载了原始文件。
有没有办法将XmlReader(甚至XML的字符串或byte []表示)加载到现有的XDocument中,覆盖内容?或者我是否必须手动进行所有更改(删除其元素并添加新元素)?
答案 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中。