2013-03-19 6 views
2

Je change de façon conditionnelle un XmlDocument dans différentes parties de mon code. Au lieu de passer un drapeau "modifié", est-ce que l'objet XmlDocument a un drapeau construit pour cela (comme isDirty)?Comment vérifier si XmlDocument a changé?

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); 

Répondre

4

Bien qu'un XmlDocument n'expose pas IsDirty drapeau, elle a des événements comme NodeChanged, NodeInserted et NodeRemoved que vous pouvez utiliser pour garder un seul drapeau, que vous n'avez pas besoin transmettre à toutes les méthodes de mutation:

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

Ah, bon endroit. Je recommanderais toujours d'envelopper ceci dans un objet exposant l'indicateur - autrement votre code de sérialisation traitera également le changement-suivi sur un XmlDocument. Mieux vaut avoir un objet spécifique pour faire face à cela –

+0

J'ajouterais que c'est un peu bizarre/paresseux de dépendre des événements pour voir quand le document change. Vous êtes celui qui écrit le code pour le changer, après tout! –

2

Non, XmlDocument stocke un document, il ne suit pas les modifications. Enveloppez-le dans une classe d'assistance, définissez un indicateur tel que vous le décrivez ou créez une autre structure OO pour qu'elle fonctionne comme vous le souhaitez.

+0

Passer les drapeaux changés autour de vous ressemble à de la litière. Avez-vous une suggestion sur le chemin à parcourir? – TruMan1

+1

Vous avez probablement une classe/méthode clairement définie pour modifier XML, sinon, fixez-la en premier. Ensuite, il devrait y avoir un endroit clair et propre pour garder un drapeau. Si vous avez l'intention de le faire souvent, dérivez de XmlDocument (ou peut-être mieux XDocument) et implémentez cette fonctionnalité proprement. Si vous avez besoin de stocker un drapeau, vous devez stocker un drapeau .. –

Questions connexes