2013-03-19 4 views
2

내 코드의 여러 부분에서 XmlDocument을 조건부로 변경하고 있습니다. "변경된"플래그를 전달하는 대신 XmlDocument 개체에이 플래그 (예 : isDirty)가 내장되어 있습니까?XmlDocument가 변경되었는지 확인하는 방법은 무엇입니까?

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

, 그것은 을 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); 
+0

아, 좋은 지점. 여전히 플래그를 노출하는 객체에서 이것을 배치하는 것이 좋습니다. 그렇지 않으면 serialization 코드가 XmlDocument의 변경 추적을 처리하기도합니다. –

+0

문서를 변경하는시기를 알기 위해 이벤트에 의존하는 것이 좀 이상하거나 게으름이라고 덧붙일 것입니다. 당신은 결국 코드를 ​​변경하는 코드입니다. –

2

아니요, XmlDocument는 문서를 저장하지만 변경 내용을 추적하지 않습니다. 도우미 클래스로 감싸거나 설명대로 플래그를 설정하거나 원하는대로 작동하도록 다른 객체 지향 구조를 만듭니다. 을 XmlDocumentIsDirty 사용 플래그를 노출하지 않지만

+0

변경된 플래그를 전달하는 것은 쓰레기처럼 보입니다. 어떤 방법으로 가야할지에 대한 제안이 있습니까? – TruMan1

+1

아마도 XML을 수정하기위한 클래스/메소드가 명확하게 정의되어있을 것입니다. 그렇지 않은 경우 먼저 수정하십시오. 다음 깃발을 지키는 명확하고, 청결한 장소가 있어야한다. XmlDocument (또는 더 나은 XDocument)에서 파생시키고 그 기능을 깔끔하게 구현하십시오. 깃발을 보관해야하는 경우 깃발을 보관해야합니다. –

관련 문제