如何检查XmlDocument是否已更改?

时间:2013-03-19 13:09:36

标签: c# .net xml c#-4.0

我在条件的各个部分有条件地更改了XmlDocumentXmlDocument对象是否为此构建了标记(如isDirty),而不是传递“已更改”标志?

var doc = new XmlDocument();
doc.Load(file);

if (...) parent.AppendChild(element);
if (...) parent2.AppendChild(element2);
if (...) parent3.AppendChild(element3);

//METHOD DOESN'T EXIST
if (doc.isDirty())
  doc.Save(file);

2 个答案:

答案 0 :(得分:5)

虽然 XmlDocument 没有公开 IsDirty 标记,但它确实包含 NodeChanged NodeInserted 等事件, NodeRemoved ,您可以使用它来保留单个标志,您无需将其传递给任何变异方法:

var doc = new XmlDocument();
doc.Load(file);

bool changed = false;

XmlNodeChangedEventHandler handler = (sender, e) => changed = true;
doc.NodeChanged += handler;
doc.NodeInserted += handler;
doc.NodeRemoved += handler;

// do some work

if (changed)
    doc.Save(file);

答案 1 :(得分:2)

不,XmlDocument存储文档,它不跟踪更改。将它包装在一个帮助器类中,按照你的描述设置一个标志,或者创建一些其他的OO结构以便按照你想要的方式工作。