Question

Existe-t-il un moyen d'obtenir plus d'informations utiles sur les erreurs de validation? XmlSchemaException fournit le numéro de ligne et la position de l'erreur, ce qui n'a aucun sens pour moi. Après tout, le document XML ne concerne pas sa représentation textuelle transitoire. J'aimerais obtenir une erreur énumérée (ou un code d'erreur) précisant ce qui ne va pas, un nom de nœud (ou un xpath) pour localiser la source du problème afin que je puisse peut-être essayer de le résoudre.

Éditer: je parle de documents XML valides - mais non valables contre un schéma particulier!

Était-ce utile?

La solution

Vous pouvez accomplir cela, en quelque sorte, en configurant un XmlReader dont les paramètres XmlReaderSettings contiennent le schéma, puis en l'utilisant pour lire le noeud de flux de données d'entrée par noeud. Vous pouvez garder trace du dernier noeud lu et avoir une assez bonne idée de votre position dans le document en cas d'erreur de validation.

Je pense que si vous essayez cet exercice, vous découvrirez qu'il existe de nombreuses erreurs de validation (par exemple, un élément requis manquant) pour lesquelles le concept de nœud d'erreur n'a pas beaucoup de sens. Oui, l'élément parent est clairement ce qui est erroné dans ce cas, mais ce qui a réellement déclenché l'erreur, c'est que le lecteur a rencontré la balise de fin sans jamais voir l'élément requis, d'où la ligne d'erreur et le point de position de la balise de fin.

Autres conseils

D'après mon expérience, vous avez de la chance d'obtenir un numéro de ligne et une position d'analyse.

Vous pouvez envisager de valider via une DTD qui peut parfois donner des erreurs légèrement plus intéressantes, cependant, sur un projet sur lequel je travaille actuellement, nous validons à l'aide de XSLT. La transformation vérifie la syntaxe et signale les erreurs sous forme de texte de transformation. Je considérerais cette voie si vous voulez une vérification d'erreur plus conviviale. Pour nous, une sortie vide ne signifie aucune erreur, sinon nous obtenons quelques détails intéressants du traitement XSLT sur la nature de l’erreur et son emplacement.

Personnellement, je ne sais pas comment obtenir une erreur plus détaillée. En général, si vous ouvrez le document et allez à l'emplacement indiqué, vous pouvez facilement trouver l'erreur.

Si le code ne parvient pas à analyser le fichier en tant que fichier XML valide, il est assez difficile pour lui de donner un XPATH ou un autre détail XML nommé.

Il semble que ce ne soit pas une tâche facile. La réponse de Robert Rossney se rapprochant le plus de la résolution programmée de mon problème, je l'accepterai pour l'instant. Je vais continuer à utiliser la solution xsl. Toute personne trouvant un meilleur moyen de résoudre les erreurs de validation peut répondre à ce fil de discussion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top