73 votes

Comment voulez-vous comparer les deux Documents XML?

Dans le cadre de la classe de base pour un large panel de tests unitaires, je suis en train d'écrire une fonction d'assistance de manière récursive qui compare les noeuds d'un objet XmlDocument à l'autre en C# (.NET). Certaines exigences de la présente:

  • Le premier document est la source, par exemple, ce que je veux le document XML. Ainsi, le second est celui que je veux trouver des différences et il ne doit pas contenir supplémentaire noeuds, et non dans le premier document.
  • Doit lancer une exception lorsqu'un trop grand nombre de différences significatives sont trouvées, et il doit être facilement compréhensible par un humain jetant un coup d'oeil à la description.
  • Enfant de l'élément de commande est important, les attributs peuvent être dans n'importe quel ordre.
  • Certains attributs sont ignorable; plus précisément xsi:schemaLocation et xmlns:xsi, mais je voudrais être en mesure de passer dans celles qui le sont.
  • Préfixes d'espaces de noms doivent correspondre à la fois les attributs et les éléments.
  • Les espaces entre les éléments n'est pas pertinent.
  • Éléments soit avoir des éléments d'enfant ou d' InnerText, mais pas les deux.

Alors que je suis à la démolition de quelque chose ensemble: quelqu'un a écrit un tel code et serait-il possible de le partager ici?

Sur un côté, que feriez-vous appel le premier et le second documents? J'ai été en se référant à eux en tant que "source" et "cible", mais il se sent mal depuis la source est ce que je veux de la cible à ressembler, sinon je lève une exception.

65voto

Danimal Points 5721

Microsoft a un XML diff API que vous pouvez utiliser

7voto

Santhosh Kumar T Points 967

essayez XMLUnit. Cette bibliothèque est disponible pour Java et en .Net

5voto

runrig Points 5422

La comparaison des documents XML est compliqué. Google pour xmldiff (il y a même une solution de Microsoft) pour certains outils. J'ai résolu ce problème de deux manières. J'ai utilisé XSLT pour trier les éléments et les attributs (parce que parfois, ils apparaissent dans un ordre différent, et je n'ai pas de soins à ce sujet), et de filtrer les attributs que je ne veux pas comparer, puis utilisé le XML::Diff ou XML::SemanticDiff module perl, ou de jolis imprimés chaque document avec chaque élément et attribut sur une ligne distincte, et en utilisant la ligne de commande Unix diff sur les résultats.

4voto

Do Will Points 74

Une autre façon de le faire serait d'

  1. Obtenir le contenu des deux fichiers dans les deux cordes différentes.
  2. Transformer les chaînes à l'aide d'une transformation XSLT (qui seront il suffit de copier le tout sur deux chaînes de caractères). Cela permettra d'assurer que tous les espaces à l'extérieur les éléments sont supprimés. Il en résultera deux nouvelles chaînes.
  3. Maintenant, il suffit de comparer deux chaînes de caractères les uns avec les autres.

Ce ne sera pas vous donner l'emplacement exact de la différence, mais si vous voulez simplement savoir si il y a une différence, c'est facile à faire, sans aucune des bibliothèques tierces.

3voto

Alex Gulin Points 21

Je suis à l'aide de ExamXML pour comparer des fichiers XML. Vous pouvez l'essayer. Les auteurs, A7Soft, offrent également des API pour comparer des fichiers XML

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X