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 ce:

  • Le premier document est le source, par exemple, ce que je veux le document XML ressembler. Ainsi, le second est celui que je veux trouver des différences et il ne doit pas contenir de 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 ont des éléments d'enfant ou 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 le source est ce que je veux le cible ressembler, sinon je lève une exception.

  • Peut les nœuds être le même, mais être déclarée dans un ordre différent?
  • Non, les nœuds doivent être dans le même ordre. En plus d'être une exigence des documents eux-mêmes, il permet de différenciation, un peu plus simple (juste énumérer les enfants et les vérifier un à un).
  • > les attributs peuvent être dans n'importe quel ordre Bonne chose, parce que les attributs sont non ordonnée par définition.
  • J'appelle les documents, "de base" et "test".
  • double possible de Quelle est la meilleure façon de comparer des fichiers XML pour l'égalité?