7
votes

XmlschemavalidationException.LiNaNumber et linePosition sont 0 lors de la validation d'un schéma XML avec xdocument.validate

J'essaie de valider un fragment XML à l'aide d'un schéma XML avec la méthode d'extension XDocument.Validate. Chaque fois qu'un fragment XML invalide est utilisé correctement, les incendies validationEventHandler correctement, mais les propriétés de linenumber et de linéposition de la xmlschemavalidationException sont 0. xxx

mon objectif dans l'exemple ci-dessus consiste à utiliser ValidationErrors pour informer un utilisateur pourquoi la validation a échoué. Lorsque cette méthode est utilisée, cependant, la linenumber et la sperposition sont à la fois 0.

L'extrait semble être suffisamment simple et semble fonctionner comme prévu pour la validation des fragments XML valides et non valides.

Merci d'avance!


1 commentaires

Pour autant que je puisse voir le xmlschemavalidator qui est instancié utilise uniquement une dummypostion interne et je ne vois pas une option pour obtenir une meilleure mise en œuvre injectée.


3 Réponses :


6
votes

Vous ne validez pas la représentation textuelle du XML, mais le modèle d'objet. En conséquence, il n'y a pas de lignes et de positions car il n'y a pas de fichier, mais xelement, xattribute, etc. Objets en mémoire. Un autre indice utile serait de vous demander - quelle ligne et la position doivent être renvoyées si vous avez modifié (par exemple, un élélement a été ajouté) le XDocument après avoir été chargé mais avant de lancer la validation? Si vous ne créez ni ne modifie le XML le moyen le plus rapide de vouloir utiliser XMLreader pour valider votre document XML. En tant que bonus - si l'entrée est un fichier ou un flux - vous devez obtenir des informations de ligne et de position en cas d'erreurs de validation.


2 commentaires

Pawel, merci pour votre réponse très raisonnable. Je voulais valider contre le xdocument, car j'ai déjà eu une référence. Je changerai mon application pour valider contre un xmlreader, puis créer la référence XDocument lorsqu'elle n'est absolue.


Je pense que vous devriez être capable de faire en même temps - vous pouvez configurer le lecteur de manière à valider le document, puis transmettez le lecteur à la méthode xdocument.load () ...



1
votes

Dans votre ValidationEventhandler , Sender implémente l'interface ixmllineInfo , qui contient des membres system.xml.ixmllineinfo.linenumber et system.xml.ixmllineinfo.linePosition

afin que vous puissiez faire cela: xxx


0 commentaires

0
votes

C'est une question ancienne, mais voici un moyen de préserver les positions lors de la création d'une instance XDocument - assurez-vous d'utiliser loadoption.setlineInfo xxx

alors vous pouvez Extraire la position dans la méthode de validation.


0 commentaires