Comparaison de Xml en C #
Je suis en train de comparer deux fichiers Xml à l'aide de code C#.
Je veux ignorer la syntaxe Xml différences (c'est à dire les noms de préfixes).
Pour cela, je suis à l'aide de Microsoft XML Diff et Patch API C#.
Il fonctionne pour certains, Xml, mais je ne pouvais pas trouver un moyen de le configurer pour fonctionner avec les deux suivants Xml:
XML UN:
<root xmlns:ns="http://myNs">
<ns:child>1</ns:child>
</root>
XML B:
<root>
<child xmlns="http://myNs">1</child>
</root>
Mes questions sont:
- Suis-je en droit que ces deux xml sont sémantiquement identiques (ou isomorphe)?
- Pouvez Microsoft XML de Diff et Patch API être configuré pour prendre en charge?
- Il d'autres C# utilitaires à présent?
source d'informationauteur Yaron Naveh
Vous devez vous connecter pour publier un commentaire.
Les documents sont isomorphe, comme le montre par le programme ci-dessous. Je pense que si vous utilisez
XmlDiffOptions.IgnoreNamespaces
etXmlDiffOptions.IgnorePrefixes
pour configurerMicrosoft.XmlDiffPatch.XmlDiff
vous obtenez le résultat que vous souhaitez.Je sais que vous êtes l'accent n'est pas sur les tests unitaires, mais XMLUnit permet de comparer deux fichiers XML et je pense qu'il est en mesure de résoudre votre exemple. Vous pourriez peut-être regarder le code ahd trouver votre solution.
J'ai une réponse par Martin Honnen en XML et l' .NET Framework Forum MSDN.
En bref, il suggère d'utiliser XQuery 1.0 profondes de l'égalité de la fonction et de fournitures C# implémentations. Semble fonctionner.
Il pourrait être une idée à charge XmlDocument instances de chaque fichier xml, et de comparer les DOM XML à la place? Fournir la bonne validation se fait sur chacun, ce qui devrait vous donner une base commune de comparaison, et devrait permettre la norme de la différence de production de rapports. Peut-être même la possibilité de mettre à jour l'un de l'autre avec le delta.
Ces documents ne sont pas sémantiquement équivalentes. L'élément de niveau supérieur de la première est dans le
http://myNS
espace de noms, tandis que l'élément de niveau supérieur, la deuxième est dans l'espace de noms par défaut.La enfant éléments de ces deux documents sont équivalentes. Mais les documents eux-mêmes ne le sont pas.
Edit:
Il y a un monde de différence entre
xmls:ns='http://myNS'
etxmlns='http://myNS'
que j'semblent l'avoir négligé. De toute façon, ces documents sont sémantiquement équivalentes, et je suis juste trompé.