Validation XML avec XSD dans Visual Studio IDE

je sais que je l'ai déjà fait, mais cela ne fonctionne pas aujourd'hui, et je ne peux trouver nulle part qui explique comment le faire. C'est peut-être mon manque de sommeil, mais je soupçonne les gremlins.

j'ai un document XML et un répertoire rempli de XSD qui le définissent. Comment configurer L'IDE visuel pour me prévenir des échecs de validation, et ensuite fournir une liste intellisense d'étiquettes 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 des schémas XML (sous XML / Schemas... élément de menu.)
  • j'ai même inclus les attributs schemaLocation et noNamespaceSchemaLocation dans le document XML.

Visual Studio n'abandonne toujours aucune information utile de débogage ou d'édition. J'ai essayé 2010 et 2008 (je l'ai déjà fait en 2008 je pense)

mise à jour: j'ai demandé à un autre développeur d'essayer ceci et cela a échoué pour lui aussi. Il sait qu'il a fait avec d'autres documents XML et qu'il avait du travail. J'ai ensuite téléchargé L'éditeur de XML D'oxygène et il a fonctionné très bien sur les mêmes fichiers XML et XSD, de sorte que les fichiers semblent être très bien (ou oxygène est plus indulgente / flexible . . . )

87
demandé sur Jim McKeeth 2010-07-01 23:55:43

5 réponses

Jim,

vous devez associer le document XML dans Visual Studio avec le fichier XSD que vous avez - vous devriez voir quelque chose comme cela dans votre fenêtre de propriétés du document XML:

alt text

Mirror 1

dans L'éditeur de jeu de schéma XML (s'ouvre lorsque vous cliquez sur le (...) ellipsis dans la zone de texte" Schemas " dans la fenêtre de vos propriétés) Vous devez vous assurer que vous avez votre schéma actuel. Aussi, assurez-vous que la colonne Use pour ce schéma est activé - si non, cliquez dessus - vous obtiendrez une liste déroulante des options, choisissez le Use avec le crochet vert:

alt text

Mirror 1

assurez-vous que les fenêtres de la liste des erreurs Visual Studio sont visibles (vue du menu > Liste des erreurs). Cela montrera toutes les incohérences entre les schémas XML et XSD définition.

une fois que tout cela est en place, L'éditeur XML de Visual Studio devrait mettre en évidence les problèmes avec votre XML dans l'éditeur à l'aide de Blue squigglies:

alt text

Mirror 1

119
répondu marc_s 2017-06-27 14:46:37

vous n'avez pas besoin d'associer manuellement les fichiers dans Visual Studio - il va automatiquement associer un fichier XML à un fichier XSD si vous les avez tous les deux ouverts, et vous avez votre namespace correctement défini.

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 remarque 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 aux types définis dans le schéma devra être préfixée avec un espace de noms (c'est pourquoi 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" />
31
répondu Ross McNab 2014-08-06 08:01:10

un autre point d'échec ici est Windows 7" blocage " des fichiers de schéma... cliquez-droit sur le fichier xsd sur le disque, Propriétés > Général et si c'est bloqué, vous aurez un bouton "Débloquer". Cela a causé l'échec de ma validation XML dans VS2012.

2
répondu EJA 2013-07-24 12:44:18

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

exemple:

xsd:

xml: ...

voir aussi XML/XSD intellisense ne fonctionne pas dans Visual Studio 2010

1
répondu k3b 2017-05-23 10:30:43

j'ai eu ce même problème, mais VS référençait déjà mon schéma correctement. Il s'avère que le fichier que j'essayais de valider n'avait pas d'extension 'xml'. Ajouter. xml à la fin de mon nom de fichier, et la validation commencé à travailler.

0
répondu John Livermore 2012-09-28 20:15:32