2

我有条件地更改XmlDocument代码的各个部分。不是传递“更改”标志,而是XmlDocument对象是否有为此构建的标志(如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);
4

2 回答 2

5

尽管XmlDocument没有公开IsDirty标志,但它确实具有诸如NodeChangedNodeInsertedNodeRemoved 之类的事件,您可以使用它们来保留单个标志,而无需将其传递给任何突变方法:

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);
于 2013-03-19T13:22:35.000 回答
2

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

于 2013-03-19T13:12:19.560 回答