2009-08-21 12 views
5

Existe-t-il un moyen simple de comparer deux structures XML pour déterminer si elles ont la même structure et les mêmes données?Comparer deux XmlNodes en C#

J'ai une fonction qui retourne un XmlNode et j'essaye d'écrire des tests unitaires pour cela. Je stocke le résultat XML correct dans un fichier. Durring le test je charge le fichier dans un XmlDocument, localise le XmlNode et compare avec le résultat de la fonction. Une comparaison directe ne fonctionne pas (comme prévu) et InnerXml ne fonctionne pas non plus. J'envisage de supprimer tous les espaces d'InnerXml et de comparer cela, ou d'écrire ma propre comparaison pour marcher dans l'arbre, mais je n'aime pas beaucoup l'option.

+0

Quelle version de .NET utilisez-vous? –

Répondre

2

Si vous devez utiliser XmlDocument et ses types de soutien, pensez à utiliser XmlDiffPatch Microsoft, qui effectue personnalisables diff-opérations sur XML structures de données.

7

XNode.DeepEquals. Lire les mises en garde avant de l'utiliser.

+0

La question porte sur 'XmlDocument' /' XmlNode', pas sur LINQ to XML. –

+0

Pour être précis, sa question porte sur la comparaison des structures XML. Son problème est avec son approche (en utilisant XmlDocument). Je suis d'accord avec CodeToGlory: XNode.DeepEquals. –

2

Comme réponse CodeToGlory, XNode.DeepEquals() pourrait répondre à votre facture, consultez la section remarques sur la page MSDN.

Si vous êtes bloqué avec XmlDocument (au lieu de XDocument), la réponse est: Non, il n'y a pas de moyen simple (existant) de le faire. XmlNode ne remplace pas Equals() ou fournit une alternative. Mais il n'est pas impossible d'écrire, et cette même section Notes peut être utilisée comme point de départ pour un algorithme de marche en arbre.

obtenez une image claire de vos besoins d'abord, en ce qui concerne les attributs, les commentaires, les nœuds CDATA etc.

Questions connexes