Convalida XML con XSD nell'IDE di Visual Studio


96

So di averlo fatto prima, ma oggi non funziona, né posso trovare da nessuna parte che spieghi come farlo. Potrebbe essere la mia mancanza di sonno, ma sospetto che i gremlins.

Ho un documento XML e una directory piena di XSD che lo definiscono. Come faccio a impostare l'IDE visuale per notificarmi gli errori di convalida e quindi fornire un elenco intellisense di tag e attributi validi in un determinato contesto?

Quello che ho provato:

  • Ho aggiunto gli XSD al progetto con il documento XML.
  • Ho aggiunto gli XSD all'elenco XML Schema (sotto la voce di menu XML / Schemas ...).
  • Ho persino incluso gli attributi schemaLocation e noNamespaceSchemaLocation nel documento XML.

Visual Studio continua a non fornire informazioni utili per il debug o la modifica. Ho provato sia il 2010 che il 2008 (l'ho fatto prima nel 2008 pensavo)

Aggiornamento: ho fatto provare a un altro sviluppatore e anche per lui non è riuscito. Sa di averlo fatto con altri documenti XML e di averlo fatto funzionare. Ho quindi scaricato l'editor XML di Oxygen e ha funzionato bene sugli stessi file XML e XSD, quindi i file sembrano andare bene (o Oxygen è più indulgente / flessibile..)

Risposte:


138

Dovrai associare il documento XML in Visual Studio al file XSD che hai.

  1. Dovresti vedere qualcosa di simile nella finestra Proprietà del documento XML:

    Proprietà XML> Schema

  2. Nell'editor del set di schemi XML (si apre quando fai clic sui puntini di sospensione (...) nella casella di testo "Schemi" nella finestra Proprietà) devi assicurarti di avere lo schema presente. Inoltre, assicurati che la Usecolonna per quello schema sia abilitata - in caso contrario, fai clic su di essa - otterrai un elenco a discesa di opzioni, scegli Usequello con il segno di spunta verde:

    Selettore schema XML

  3. Assicurati che la finestra Elenco errori di Visual Studio sia visibile (menu Visualizza> Elenco errori). Questo mostrerà tutte le incongruenze tra le definizioni di schema XML e XSD.

  4. Una volta che tutto ciò è a posto, l'editor XML di Visual Studio dovrebbe evidenziare i problemi con il tuo XML nell'editor utilizzando i quadratini blu:

    Esempio di errore


Grazie, è un'ottima spiegazione dettagliata, ma la mia non funziona ancora. Non sapevo che potessi accedere all'elenco degli schemi da proprietà del genere.
Jim McKeeth

@ Jim McKeeth: cosa succede se modifichi il tuo XML e lo salvi di nuovo? A volte la convalida XML necessita di un trigger per avviare ...
marc_s

Ho accettato la tua risposta anche se non ha funzionato per me. Immagino che il mio sistema sia stato appena lavato, ma sono passato a un nuovo computer e ora funziona tutto bene.
Jim McKeeth,

38
@jim Non sono sicuro che tu abbia lo stesso problema, ma ho passato una quantità di tempo ridicola prima di rendermi conto che il file XML deve essere aperto nell'editor e il focus deve essere nell'editor quando si richiama la finestra Proprietà. Solo allora si ottengono le proprietà "Documento XML" dove è possibile assegnare uno schema. Se lo stato attivo è in Esplora soluzioni, la finestra Proprietà visualizza solo le proprietà del file, ovvero non è possibile l'assegnazione di schemi.
herzbube

2
Penso che dovresti aggiungere i risultati di @ herzbube nella risposta stessa.
ashish

35

Non è necessario associare manualmente i file in Visual Studio: abbinerà automaticamente un file XML a un file XSD se sono entrambi aperti e lo spazio dei nomi è stato definito correttamente.

Per definire lo spazio dei nomi:

Nell'elemento radice del file XML:

<Data xmlns='http://yourdomain.com/yourschema.xsd'>
    ...
</Data>

Nell'elemento schema del file 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>

Una nota sull'utilizzo dei tipi nel tuo schema quando hai un targetNamespace

Poiché stai specificando a targetNamespacenel tuo schema, tutti i riferimenti ai tipi definiti nello schema dovranno essere preceduti da uno spazio dei nomi (motivo per cui abbiamo aggiunto l' xmlns:thisattributo nell'elemento precedente <xs:schema />).

<!-- 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" />

3

Un altro punto di errore qui è il "blocco" dei file dello schema di Windows 7 ... fai clic con il pulsante destro del mouse sul file xsd sul disco, Proprietà> Generale e se è bloccato, avrai un pulsante "Sblocca". Ciò causava il fallimento della mia convalida XML in VS2012.


1

Il tuo xsd contiene un attributo "targetNamespace" /schema/@targetNamespace simile allo spazio dei nomi a cui fai riferimento nell'xml?

Esempi:

XSD :

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

XML :

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

Vedere anche: XML / XSD intellisense non funziona in Visual Studio 2010


0

Ho avuto lo stesso problema, ma VS faceva già riferimento al mio schema correttamente. Risulta che il file che stavo cercando di convalidare non aveva un'estensione di file "xml". Aggiunto .xml alla fine del mio nome file e la convalida ha iniziato a funzionare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.