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. 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. P> L'extrait semble être suffisamment simple et semble fonctionner comme prévu pour la validation des fragments XML valides et non valides. P> Merci d'avance! p> p>
3 Réponses :
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. P>
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 () ...
Dans votre afin que vous puissiez faire cela: p> ValidationEventhandler code>,
Sender code> implémente l'interface
ixmllineInfo code>, qui contient des membres
system.xml.ixmllineinfo.linenumber code > et
system.xml.ixmllineinfo.linePosition code>
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 alors vous pouvez Extraire la position dans la méthode de validation. P> P> loadoption.setlineInfo code>
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.