2012-05-23 11 views
1

J'ai une question sur l'utilisation de XSD Schema pour valider le format XML.XSD Schema validation

J'ai déjà programmé avec succès pour valider le format XML en utilisant le schéma XSD. Cependant, j'ai besoin de mettre le fichier xx.xsd à l'emplacement principal du projet en cours. Est-il possible d'intégrer le schéma xsd à l'assembly de sorte que je n'ai pas besoin de toujours mettre xxx.xsd au même emplacement de l'assembly exécutable. J'ai essayé de l'incorporer aux ressources du projet, mais il semble que je ne suis pas capable de resgen un fichier XSD en utilisant l'invite de commande VS comme ce resgen xxx.xsd. Il dit que l'extension n'est pas supportée par cette commande.

Existe-t-il d'autres moyens de résoudre ce problème?

Toutes les suggestions sont appréciées.

Répondre

2

Étape 1: Ajouter le XSD à votre projet de bibliothèque de classe comme vous le feriez normalement

Étape 2: Faites un clic droit à des propriétés sur le fichier XSD, et sous l'action de construction, choisissez « ressource incorporée »

étape 3: Modifier le code comme indiqué ici de

XmlSchemaSet schemaSet = new XmlSchemaSet() ; 
schemaSet.Add("", XmlReader.Create(xmlSchema)); 

à

TextReader schemaStream = 
    new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream(xmlSchema)); 
XmlSchemaSet schemaSet = new XmlSchemaSet() ; 
schemaSet.Add("",XmlReader.Create(schemaStream)); 
+0

Merci Romil. Votre solution fonctionne pour moi. –

3

Si vous n'avez qu'un seul XSD (pas de références externes), la réponse de @Romil est ce dont vous avez besoin. Toutefois, si vous utilisez des XSD par composants (ensembles de XSD liés via xsd: include/import/redefine), la solution ne fonctionnera pas. This post on SO vous montre comment le résoudre correctement; vous devez construire et utiliser votre propre résolveur, cela va être capable de nourrir ces références à partir des ressources embarquées, et, aussi très important, que vous devez fournir un URI de base (typiquement une URL inventée en utilisant un schéma propriétaire) quand créer le premier lecteur.

+0

Merci Petru. Je n'ai qu'un seul XSD dans mon projet, donc la solution de Romil fonctionne pour moi. Merci pour vos suggestions. Cela fonctionnera pour moi dans le futur. –