2009-08-21 24 views
5

C'è un modo semplice per confrontare due strutture XML per determinare se hanno la stessa struttura e dei dati?Confronta due XmlNodes in C#

Ho una funzione che restituisce un XmlNode e sto cercando di scrivere unit test per esso. Memorizzo il risultato XML corretto in un file. Durante il test, carico il file in XmlDocument, localizzo l'XmlNode corretto e lo confronta con il risultato della funzione. Un confronto diretto non funziona (come previsto) e InnerXml non funziona neanche. Sto prendendo in considerazione la rimozione di tutti gli spazi bianchi da InnerXml e il confronto, o la scrittura del mio confronto per camminare l'albero, ma non mi piace molto l'una o l'altra opzione.

+0

Quale versione di .NET sono in esecuzione? –

risposta

2

Se è necessario utilizzare XmlDocument e dei suoi tipi di supporto, considerare l'utilizzo di Microsoft XmlDiffPatch, che esegue diff-operazioni personalizzabili su XML strutture dati

7

XNode.DeepEquals. Leggi i avvertimenti prima di usarlo.

+0

La domanda riguarda 'XmlDocument' /' XmlNode', non su LINQ to XML. –

+0

Per essere precisi, la sua domanda riguarda il confronto delle strutture XML. Il suo problema è con il suo approccio (usando XmlDocument). Sono d'accordo con CodeToGlory: XNode.DeepEquals. –

2

Come CodeToGlory risposto, XNode.DeepEquals() potrebbe misura la bolletta, controllare la sezione commenti sulla pagina di MSDN.

Se si è bloccato con XmlDocument (invece di XDocument), la risposta è: no, non c'è semplice (modo esistente) per farlo. XmlNode non sovrascrive Equals() o fornisce un'alternativa. Ma non è impossibile scrivere, e la stessa sezione Osservazioni può essere utilizzata come punto di partenza per un algoritmo albero-passeggiata.

fare avere un quadro chiaro delle vostre esigenze prima, per quanto riguarda gli attributi, i commenti, i nodi CDATA ecc