web-dev-qa-db-fra.com

Validation XML avec XSD dans Visual Studio IDE

Je sais que j'ai déjà fait cela auparavant, mais cela ne fonctionne pas aujourd'hui et je ne trouve nulle part ailleurs qui explique comment le faire. Ce pourrait être mon manque de sommeil, mais je soupçonne des gremlins.

J'ai un document XML et un répertoire plein de fichiers XSD qui le définissent. Comment configurer le visuel IDE pour qu'il me prévienne des échecs de validation, puis fournir une liste intellisense de balises et d'attributs valides dans un contexte donné?

Ce que j'ai essayé

  • J'ai ajouté les XSD au projet avec le document XML.
  • J'ai ajouté les XSD à la liste XML Schema (sous l'élément de menu XML/Schemas ...).
  • J'ai même inclus les attributs schemaLocation et noNamespaceSchemaLocation dans le document XML.

Visual Studio n'abandonne toujours pas d'informations de débogage ou d'édition utiles. J'ai essayé à la fois 2010 et 2008 (je l'avais déjà fait en 2008, je pensais)

Mise à jour: J'ai eu un autre développeur l'essayer et cela a échoué pour lui aussi. Il sait qu'il l'a fait avec d'autres documents XML et que cela a fonctionné. J'ai ensuite téléchargé Oxygen XML editor et cela fonctionnait bien sur les mêmes fichiers XML et XSD, de sorte que les fichiers semblent bien fonctionner (ou Oxygen est plus tolérant/flexible...)

92
Jim McKeeth

Vous devrez associer le document XML dans Visual Studio au fichier XSD que vous avez.

  1. Vous devriez voir quelque chose comme ceci dans la fenêtre Propriétés du document XML:

    XML Properties > Schema

  2. Dans l'éditeur de jeu de schémas XML (s'ouvre lorsque vous cliquez sur l'ellipse (...) dans la zone de texte "Schémas" de la fenêtre Propriétés), vous devez vous assurer que votre schéma est présent. Assurez-vous également que la colonne Use de ce schéma est activée - si ce n’est pas le cas, cliquez dessus - vous obtiendrez une liste déroulante d’options, choisissez celle Use avec la coche verte. :

    XML Schema Selector

  3. Assurez-vous que la fenêtre Liste des erreurs de Visual Studio est visible (menu Affichage> Liste des erreurs). Cela montrera toutes les incohérences entre les définitions de schéma XML et XSD.

  4. Une fois que tout cela est en place, l'éditeur XML de Visual Studio doit mettre en évidence les problèmes liés à votre code XML dans l'éditeur à l'aide de squigglies bleus:

    Example of Error

132
marc_s

Vous n'avez pas besoin d'associer manuellement les fichiers dans Visual Studio. Cela automatiquement fera correspondre un fichier XML à un fichier XSD si vous les avez tous les deux ouverts et si vous avez défini votre espace de noms correctement.

Pour définir l'espace de nom:

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>

Note sur l'utilisation de Types dans votre schéma lorsque vous avez un targetNamespace

Comme vous spécifiez un targetNamespace dans votre schéma, toute référence aux types définis dans le schéma devra être préfixée par un espace de nom (c'est pourquoi nous avons ajouté le xmlns:this attribut ci-dessus <xs:schema /> élément).

<!-- 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" />
33
Ross McNab

Un autre point d'échec ici est le "blocage" de fichiers de schéma de Windows 7 ... faites un clic droit sur le fichier xsd du disque, Propriétés> Général et s'il est bloqué, vous aurez un bouton "Débloquer". Cela entraînait l'échec de ma validation XML dans VS2012.

3
EJA

Votre xsd contient-il un attribut "targetNamespace"/schema/@targetNamespace qui est similaire à l'espace de noms que vous référencez dans le XML?

Exemples:

[~ # ~] xsd [~ # ~] :

<xs:schema .... targetNamespace="Datafile.xsd" ... >

[~ # ~] xml [~ # ~] :

<data xmlns="Datafile.xsd" >...</data>

Voir aussi: IntelliSense XML/XSD ne fonctionnant pas dans Visual Studio 201

1
k3b

J'ai eu le même problème, mais VS faisait déjà correctement référence à mon schéma. Il s'avère que le fichier que je tentais de valider n'avait pas d'extension "xml". Ajout de .xml à la fin de mon nom de fichier et la validation a commencé à fonctionner.

0
John Livermore