J'ai un fichier XML avec un emplacement de schéma spécifié tel que celui-ci:
xsi:schemaLocation="someurl ..\localSchemaPath.xsd"
Je veux valider en C #. Visual Studio, lorsque j'ouvre le fichier, le valide par rapport au schéma et répertorie parfaitement les erreurs. D'une certaine manière, cependant, je n'arrive pas à le valider automatiquement en C # sans spécifier le schéma à valider comme ceci:
XmlDocument asset = new XmlDocument();
XmlTextReader schemaReader = new XmlTextReader("relativeSchemaPath");
XmlSchema schema = XmlSchema.Read(schemaReader, SchemaValidationHandler);
asset.Schemas.Add(schema);
asset.Load(filename);
asset.Validate(DocumentValidationHandler);
Ne devrais-je pas pouvoir valider automatiquement avec le schéma spécifié dans le fichier XML? Qu'est-ce que je rate ?
Réponses:
Vous devez créer une instance XmlReaderSettings et la transmettre à votre XmlReader lorsque vous la créez. Ensuite, vous pouvez vous abonner à la
ValidationEventHandler
dans les paramètres pour recevoir des erreurs de validation. Votre code finira par ressembler à ceci:la source
using
clause d'exhaustivité :)settings.ValidationEventHandler += (o, args) => { errors = true; // More code };
Un moyen plus simple, si vous utilisez .NET 3.5, consiste à utiliser
XDocument
et àXmlSchemaSet
valider.Consultez la documentation MSDN pour plus d'assistance.
la source
<catalog><![CDATA[my <i> new </i> catalog....]]></catalog>
est la bonne façon de faire cela.L' exemple suivant valide un fichier XML et génère l'erreur ou l'avertissement approprié.
L'exemple précédent utilise les fichiers d'entrée suivants.
books.xsd
la source
personnellement je privilégie la validation sans rappel:
(voir l'article de Timiz0r dans Synchronous XML Schema Validation? .NET 3.5 )
la source
J'avais fait ce genre de validation automatique en VB et voici comment je l'ai fait (converti en C #):
Puis je me suis abonné à l'
settings.ValidationEventHandler
événement en lisant le fichier.la source