2010-07-01 12 views
84

Ich weiß, dass ich das schon einmal gemacht habe, aber es funktioniert heute nicht, noch kann ich irgendwo finden, dass erklärt, wie es geht. Es könnte mein Mangel an Schlaf sein, aber ich vermute Gremlins.XML-Validierung mit XSD in Visual Studio IDE

Ich habe ein XML-Dokument und ein Verzeichnis voller XSDs, die es definieren. Wie setze ich Visual IDE auf, um mich über Validierungsfehler zu benachrichtigen, und stelle dann eine IntelliSense-Liste gültiger Tags und Attribute in einem bestimmten Kontext bereit?

Was habe ich versucht:

  • Ich habe die XSD die für das Projekt mit dem XML-Dokument hinzugefügt.
  • Ich habe die XSD die in der XML-Schema-Liste (unter XML/Schemen ... Menüpunkt.) Hinzugefügt
  • ich habe sogar das schema und noNamespaceSchemaLocation Attribute zu dem XML-Dokument.

Visual Studio gibt immer noch keine nützliche Debugging- oder Bearbeitungsinformationen auf. Ich probierte beide 2010 und 2008 (ich habe es vorher im Jahr 2008 getan, dachte ich)

Update: Ich hatte einen anderen Entwickler versuchen dies und es scheiterte für ihn auch. Er weiß, dass er es mit anderen XML-Dokumenten gemacht hat und es funktioniert hat. Ich heruntergeladen Oxygen XML Editor dann und es funktionierte gut auf den gleichen XML und XSD-Dateien, so dass die Dateien scheinen in Ordnung zu sein (oder Sauerstoff ist toleranter/flexibel...)

Antwort

115

Jim,

Sie müssen das XML-Dokument in Visual Studio mit der XSD-Datei verknüpfen Sie haben - Sie etwas in Ihrem Fenster Eigenschaften des XML-Dokuments sehen sollen:

alt text

Mirror 1

Im XML-Schemaset-Editor (wird geöffnet, wenn Sie auf die (...) Auslassungspunkte im Textfeld "Schemas" in Ihrem Eigenschaftenfenster klicken) müssen Sie sicherstellen, dass Ihr Schema vorhanden ist. Stellen Sie außerdem sicher, dass die Use Spalte für dieses Schema aktiviert ist - wenn nicht, darauf klicken - Sie werden eine Dropdown-Liste der Optionen zu erhalten, wählen Sie die Use ein mit dem grünen Häkchen:

alt text

Mirror 1

Stellen Sie sicher, dass die Fehlerliste von Visual Studio sichtbar ist (Menü Ansicht> Fehlerliste). Dadurch werden alle Inkonsistenzen zwischen XML- und XSD-Schemadefinitionen angezeigt.

Wenn das alles ist vorhanden, sollte der Visual Studio-XML-Editor markiert Probleme mit Ihrem XML im Editor blau squigglies mit:

alt text

Mirror 1

+0

Danke, das ist eine sehr detaillierte Erklärung, aber meine funktioniert immer noch nicht. Ich wusste nicht, dass du von solchen Objekten aus auf die Schemaliste kommen kannst. –

+0

@ Jim McKeeth: Was passiert, wenn Sie Ihre XML ändern und erneut speichern? Manchmal benötigt die XML-Validierung einen Auslöser, um ... –

+0

Ich habe Ihre Antwort akzeptiert, obwohl es für mich nicht funktioniert hat. Ich vermute, dass mein System nur abgespritzt wurde, aber ich bin auf einen neuen Computer umgezogen und alles funktioniert jetzt gut. –

1

Enthält Ihr XSD ein Attribut "targetNamespace"/schema/@ targetNamespace, das dem Namespace ähnelt, auf den Sie in der XML verweisen?

Beispiel:

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

xml: < Daten xmlns = "Datafile.xsd">. ..

siehe auch XML/XSD intellisense not working in Visual Studio 2010

0

ich das gleiche Problem hatte, aber VS wurde Referenzierung mein Schema richtig bereits. Stellt fest, dass die Datei, die ich zu validieren versuchte, keine XML-Dateierweiterung hatte. Am Ende meines Dateinamens wurde .xml hinzugefügt, und die Validierung wurde gestartet.

29

Sie müssen die Dateien in Visual Studio nicht manuell verknüpfen - es wird automatisch eine XML-Datei mit einer XSD-Datei übereinstimmen, wenn Sie beide geöffnet haben, und Sie haben Ihren Namespace korrekt definiert.

den Namensraum zu definieren:

In dem Stammelement der XML-Datei:

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

im Schema Elements XSD-Datei:

<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> 

Ein Hinweis zur Verwendung von Typen in Ihr Schema, wenn Sie ein targetNamespace haben

Da Sie in Ihrem Schema eine targetNamespace angeben, müssen alle Verweise auf im Schema definierte Typen ein Namespace vorangestellt werden (weshalb wir das xmlns:this-Attribut im obigen Element <xs:schema /> hinzugefügt haben).

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

Ein weiterer Punkt des Scheiterns ist hier Windows 7 „blockiert“ Schema-Dateien ... Rechtsklick auf die XSD-Datei auf der Festplatte, Eigenschaften> Allgemein und wenn es blockiert ist, erhalten Sie eine „Nicht mehr blocken“ Taste haben . Dies führte dazu, dass meine XML-Validierung in VS2012 fehlschlug.

Verwandte Themen