La validation d'un fichier XML à l'encontre référencé XSD en C#
J'ai un fichier XML avec un schéma spécifié l'emplacement comme ceci:
xsi:schemaLocation="someurl ..\localSchemaPath.xsd"
Je veux valider en C#. Visual Studio, quand j'ouvre le fichier, le valide par rapport au schéma et répertorie les erreurs parfaitement. Cependant, je n'arrive pas à valider automatiquement en C# sans spécifier le schéma de validation de la sorte:
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 être en mesure de valider avec le schéma spécifié dans le fichier XML automatiquement ? Ce qui me manque ?
- Consultez le MSDN exemple : msdn.microsoft.com/en-us/library/...
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour créer un XmlReaderSettings instance et le passer à votre XmlReader lorsque vous le créez. Ensuite, vous pouvez vous abonner à la
ValidationEventHandler
dans les paramètres afin de recevoir des erreurs de validation. Votre code va finir par ressembler à cela:using
clause d'intégralité 🙂xmlns:xsi, xmlns and xsi:schemaLocation
, et j'ai fichier xsd avectargetNamespace, xmlns, and xmlns:xs
? plein de fichierssettings.ValidationEventHandler += (o, args) => { errors = true; // More code };
Un moyen plus simple, si vous êtes en utilisant .NET 3.5, est d'utiliser
XDocument
etXmlSchemaSet
de validation.Voir le La documentation MSDN pour plus d'assistance.
<catalog><![CDATA[my <i> new </i> catalog....]]></catalog>
est la façon correcte de le faire.Suivantes exemple valide d'un fichier XML et génère le d'erreur ou d'avertissement.
L'exemple précédent utilise les fichiers d'entrée.
livres.xsd
personnellement je préfère la validation sans un rappel:
(voir Timiz0r post dans Synchrone de la Validation de Schéma XML? .NET 3.5)
J'ai dû faire ce genre de validation automatique en VB et c'est la façon dont je l'ai fait (converti en C#):
Puis je me suis abonné à la
settings.ValidationEventHandler
événement lors de la lecture du fichier.