Validation XML avec XSD dans Visual Studio IDE
-
01-10-2019 - |
Question
Je sais que je l'ai fait avant, mais il ne fonctionne pas aujourd'hui, et je ne puis trouver nulle part qui explique comment le faire. Il pourrait être mon manque de sommeil, mais je soupçonne que gremlins.
J'ai un document XML et un répertoire complet de XSD de qui le définissent. Comment puis-je configurer l'IDE Visual jusqu'à me signaler les échecs de validation, puis fournir une liste IntelliSense des balises valides et les attributs dans un contexte donné?
Ce que j'ai essayé:
- J'ai ajouté de la XSD au projet avec le document XML.
- J'ai ajouté les XSD à la liste pour le schéma XML (sous XML / schemas ... élément de menu.)
- Je l'ai même inclus les schemaLocation et noNamespaceSchemaLocation attribue au document XML.
Visual Studio est toujours pas renonçons débogage utile ou des informations d'édition. J'ai essayé 2010 et 2008 (je l'ai fait avant en 2008 je pensais)
Mise à jour: J'avais un autre développeur essayer et il a échoué pour lui aussi. Il sait qu'il a fait avec d'autres documents XML et a fonctionner. Je puis téléchargé éditeur XML d'oxygène et il a bien fonctionné sur le même XML et les fichiers XSD, de sorte que les fichiers semblent être bien (ou de l'oxygène est plus tolérant / flexible...)
La solution
Vous devrez associer le document XML dans Visual Studio avec le fichier XSD que vous avez.
-
Vous devriez voir quelque chose comme ceci dans votre fenêtre Propriétés du document XML:
-
Dans l'éditeur de jeu de schéma XML (ouvre lorsque vous cliquez sur le (...) dans la zone de texte ellipsis « schèmes » dans la fenêtre Propriétés), vous devez vous assurer que vous avez votre présent schéma. Aussi, assurez-vous que la colonne de
Use
pour ce schéma est activé - sinon, cliquez dessus - vous obtiendrez une liste déroulante des options, choisissez celui deUse
avec la coche verte: -
Assurez-vous que les fenêtres visuelles de la liste des erreurs de Studio est visible (menu Affichage> Liste d'erreur). Cela montrera toutes les incohérences entre XML et les définitions de schéma XSD.
-
Une fois que tout cela est en place, l'éditeur XML Visual Studio devrait mettre en évidence des problèmes avec votre XML dans l'éditeur en utilisant squigglies bleu:
Autres conseils
Vous ne devez associer manuellement les fichiers dans Visual Studio - il sera automatiquement correspondre un fichier XML dans un fichier XSD si vous les avez tous deux ouverts, et vous avez votre espace de nom défini correctement.
Pour définir l'espace de noms:
Dans l'élément racine du fichier XML:
<Data xmlns='http://yourdomain.com/yourschema.xsd'>
...
</Data>
Dans l'élément de schéma du fichier XSD:
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://yourdomain.com/yourschema.xsd"
xmlns:this="http://yourdomain.com/yourschema.xsd"
elementFormDefault="qualified">
...
</xs:schema>
Une note sur l'utilisation de types dans votre schéma lorsque vous avez un targetNamespace
Parce que vous spécifiez un targetNamespace
dans votre schéma, toute référence à des types définis dans le schéma devra être préfixé avec un espace de noms (ce qui est la raison pour laquelle nous avons ajouté l'attribut xmlns:this
dans l'élément <xs:schema />
ci-dessus).
<!-- Define the type as normal -->
<xs:complexType name="Row">
<xs:sequence>
<xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1" />
<xs:element name="Value" type="xs:float" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
<!-- Use the type (note the "this:" prefix) -->
<xs:element name="Row" type="this:Row" minOccurs="0" maxOccurs="unbounded" />
Un autre point d'échec est ici Windows 7 « bloquer » les fichiers de schéma ... clic droit sur le fichier xsd sur le disque, Propriétés> Général et si elle est bloquée, vous aurez un bouton « Débloquer ». Cela a été à l'origine de mon validation XML à l'échec dans VS2012.
Votre xsd contiennent un attribut "targetNamespace"
/schema/@targetNamespace
qui est similaire à l'espace de noms que vous faites référence dans le fichier XML?
Exemples:
XSD :
<xs:schema .... targetNamespace="Datafile.xsd" ... >
XML :
<data xmlns="Datafile.xsd" >...</data>
Voir aussi: XML / XSD IntelliSense ne fonctionne pas dans Visual studio 2010
J'ai eu ce même problème, mais VS faisait référence correctement déjà mon schéma. Il se trouve que le fichier que je tentais de validate n'a pas eu une extension de fichier « xml ». Ajouté .xml à la fin de mon nom, et la validation a commencé à travailler.