2009-12-28 4 views
6

Je viens de découvrir la beauté de la génération automatique de schéma XSD de Visual Studio. *Attacher automatiquement des fichiers XML au schéma XSD dans Visual Studio?

Existe-t-il un moyen facile pour VS d'attacher automatiquement des fichiers avec des noms particuliers au schéma XSD existant? Donc, si j'ai des fichiers myconfig.xml dispersés dans un projet (ou plusieurs projets), je voudrais qu'ils veuillent toujours les valider par rapport à myconfig.xsd, plutôt que d'avoir à ouvrir chaque fichier XML et à l'associer manuellement. Est-ce possible?

* Pour ceux qui ne sont pas familiers: fichier Open XML, XML/Créer un schéma et il crée un joli fichier schéma basé sur ce qu'il voit dans votre fichier XML. Vous pouvez puis joindre la même XSD à un autre fichier XML en ouvrant ce fichier et choisir XML/Schémas et en choisissant le schéma approprié de votre projet. Vous obtenez alors IntelliSense et validation sur tous vos éléments et noms d'attributs, éléments et attributs requis, etc.


Mise à jour: Je pense que je n'étais pas vraiment clair.

Lorsque je crée un nouveau fichier web.config n'importe où dans un projet, je ne lui attribue pas de schéma manuellement. Aucun espace de noms n'est spécifié dans le fichier XML. Néanmoins Visual Studio sait automatiquement utiliser DotNetConfig.xsd:

XML Schemas dialog screenshot http://i46.tinypic.com/xarpfn.png

On peut supposer que Visual Studio a une correspondance quelque part qui affecte les fichiers nommés web.config-DotNetConfig.xsd. Maintenant, supposons que tous les fichiers nommés DbSchema.xml utilisent automatiquement un schéma que j'ai créé appelé DbSchema.xsd. Y-a-t-il un moyen de faire ça?

+0

Avez-vous jamais comprendre cela? Si oui, partagez. –

Répondre

5

Si vos schémas sont dans le même espace de travail (pas nécessairement projet) que vos fichiers XML, Visual Studio les utilisera automatiquement l'auto-complétion et de validation, tant que vos fichiers avoir une déclaration d'espace de noms.

Vous n'avez même pas besoin de mettre dans un attribut schemaLocation.

les opérations suivantes:

  • Double-cliquez sur un fichier XML pour l'ouvrir
  • Dans le menu "XML" qui apparaît maintenant de façon dynamique, cliquez sur "... Schemas". Cela vous montrera le mappage actuel des espaces de noms aux schémas.

Pour vérifier si cela fonctionne, essayez de placer un support d'angle ouvert quelque part, il devrait suggérer des noms d'éléments.

Edit: cela va également travailler avec des fichiers XML sans espaces de noms, mais vous avez sans doute d'ajouter un nouveau catalogue de schéma à% Installer% \ Xml \ Schemas, as described here. Près du bas, il décrit comment utiliser l'élément "Association" pour associer des schémas par extension.

+0

Veuillez consulter la mise à jour ci-dessus pour plus de précisions. –

+0

Ajout d'autres explications sous "edit". – xcut

+0

C'était le lien que je cherchais, merci! –

1

lorsque l'utilisation, espace de noms comme ajouter http //...../ xxx.xsd ou ../Common/xxx.xsd si facile

<configuration> 

    <configSections> 
    <section name="RouteConfigSection" type="RouteSection.RouteConfigSection,RouteSection" /> 
    </configSections> 

    <RouteConfigSection xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="RouteConfigSection.xsd"> 
    <routes>... 

quant à lui:

public class RouteConfigSection : ConfigurationSection 
{ 
    [ConfigurationProperty("routes", IsDefaultCollection = false)] 
    public RouteConfigElementCollection Routings { get { return (RouteConfigElementCollection)base["routes"]; } } 

    //https://github.com/bspell1/NLogEx/blob/master/NLogEx.Mvc/Config/Config.cs 
    [ConfigurationProperty("xmlns")] 
    private String Ns1 { get { return null; } } 

    [ConfigurationProperty("xmlns:xsi")] 
    private String Ns2 { get { return null; } } 

    [ConfigurationProperty("xsi:noNamespaceSchemaLocation")] 
    private String Ns3 { get { return null; } } 
} 
Questions connexes