105 votes

Validation XML avec XSD dans l'IDE Visual Studio

Je sais que j'ai déjà fait cela auparavant, mais cela ne fonctionne pas aujourd'hui, et je ne trouve nulle part d'explication sur la manière de le faire. Cela pourrait être dû à 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 notifier des échecs de validation, puis fournir une liste d'intellisense des balises et 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 du schéma XML (sous l'élément de menu XML / Schémas...).
  • J'ai même inclus les attributs schemaLocation et noNamespaceSchemaLocation dans le document XML.

Visual Studio ne fournit toujours aucune information utile pour le débogage ou l'édition. J'ai essayé à la fois avec la version 2010 et 2008 (je pensais l'avoir déjà fait avec 2008)

Mise à jour: J'ai demandé à un autre développeur d'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é l'éditeur Oxygen XML et cela a bien fonctionné avec les mêmes fichiers XML et XSD, donc les fichiers semblent être bons (ou Oxygen est plus tolérant / flexible...)

145voto

marc_s Points 321990

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

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

    Propriétés XML > Schéma

  2. Dans l'éditeur de jeu de schémas XML (ouvre lorsque vous cliquez sur les (...) points de suspension dans la zone de texte "Schémas" de vos propiétés), assurez-vous d'avoir votre schéma présent. De plus, assurez-vous que la colonne Utilisation pour ce schéma est activée - sinon, cliquez dessus - vous obtiendrez une liste déroulante d'options, choisissez celle avec le Utilisation avec le coche vert :

    Sélecteur de Schéma XML

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

  4. Une fois que tout est en place, l'éditeur XML de Visual Studio doit mettre en évidence les problèmes avec votre XML dans l'éditeur en utilisant des traits ondulés bleus :

    Exemple d'erreur

0 votes

Merci, c'est une excellente explication détaillée, mais la mienne ne fonctionne toujours pas. Je ne savais pas que vous pouviez accéder à la liste des schémas à partir de propriétés comme ça.

0 votes

@Jim McKeeth : et si vous modifiez votre XML et le sauvegardez à nouveau ? Parfois, la validation XML a besoin d'un déclencheur pour s'activer...

0 votes

J'ai accepté ta réponse même si elle n'a pas fonctionné pour moi. Je présume que mon système était simplement mal configuré, mais j'ai déménagé sur un nouvel ordinateur et maintenant tout fonctionne parfaitement.

35voto

Ross McNab Points 2995

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

Pour définir l'espace de noms:

Dans l'élément racine du fichier XML:

    ...

Dans l'élément schema du fichier XSD:

    ...

Remarque sur l'utilisation des types dans votre schéma lorsque vous avez un targetNamespace

Étant donné que vous spécifiez un targetNamespace dans votre schéma, toutes les références aux types définis dans le schéma devront être préfixées par un espace de noms (c'est pourquoi nous avons ajouté l'attribut xmlns:this dans l'élément ci-dessus).

3voto

EJA Points 349

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

1voto

k3b Points 5381

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

Exemples:

XSD:

XML:

...

Voir aussi: XML/XSD intellisense not working in Visual Studio 2010

0voto

bigwavesoftware Points 3929

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X