XML-Validierung mit XSD in Visual Studio IDE

96

Ich weiß, dass ich das schon einmal gemacht habe, aber es funktioniert heute nicht und ich kann auch nirgendwo etwas finden, das erklärt, wie es geht. Es könnte mein Schlafmangel sein, aber ich vermute Gremlins.

Ich habe ein XML-Dokument und ein Verzeichnis voller XSDs, die es definieren. Wie richte ich die visuelle IDE ein, um mich über Validierungsfehler zu informieren und dann eine Intellisense-Liste gültiger Tags und Attribute in einem bestimmten Kontext bereitzustellen?

Was ich versucht habe:

  • Ich habe die XSDs mit dem XML-Dokument zum Projekt hinzugefügt.
  • Ich habe die XSDs zur Liste der XML-Schemas hinzugefügt (unter dem Menüpunkt XML / Schemas ...).
  • Ich habe sogar die Attribute schemaLocation und noNamespaceSchemaLocation in das XML-Dokument aufgenommen.

Visual Studio gibt immer noch keine nützlichen Debugging- oder Bearbeitungsinformationen auf. Ich habe es sowohl 2010 als auch 2008 versucht (ich habe es schon 2008 gemacht, dachte ich)

Update: Ich habe dies von einem anderen Entwickler versuchen lassen und es ist auch für ihn fehlgeschlagen. Er weiß, dass er es mit anderen XML-Dokumenten gemacht hat und es funktioniert hat. Ich habe dann den Oxygen XML-Editor heruntergeladen und er hat bei denselben XML- und XSD-Dateien einwandfrei funktioniert, sodass die Dateien in Ordnung zu sein scheinen (oder Oxygen verzeihender / flexibler ist.)

Jim McKeeth
quelle

Antworten:

138

Sie müssen das XML-Dokument in Visual Studio mit der vorhandenen XSD-Datei verknüpfen.

  1. In Ihrem Eigenschaftenfenster des XML-Dokuments sollte Folgendes angezeigt werden:

    XML-Eigenschaften> Schema

  2. Im XML-Schema-Set-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 UseSpalte für dieses Schema aktiviert ist. Wenn nicht, klicken Sie darauf. Sie erhalten eine Dropdown-Liste mit Optionen. Wählen Sie die Usemit dem grünen Häkchen aus:

    XML Schema Selector

  3. Stellen Sie sicher, dass die Fehlerlistenfenster von Visual Studio sichtbar sind (Menü Ansicht> Fehlerliste). Dies zeigt alle Inkonsistenzen zwischen XML- und XSD-Schemadefinitionen an.

  4. Sobald dies alles vorhanden ist, sollte der Visual Studio XML-Editor Probleme mit Ihrem XML im Editor mithilfe blauer Kringel hervorheben:

    Beispiel eines Fehlers

marc_s
quelle
Danke, das ist eine großartige detaillierte Erklärung, aber meine funktioniert immer noch nicht. Ich wusste nicht, dass Sie mit solchen Eigenschaften zur Schemaliste gelangen können.
Jim McKeeth
@ Jim McKeeth: Was ist, wenn Sie Ihr XML ändern und es erneut speichern? Manchmal braucht die XML-Validierung einen Auslöser, um ...
marc_s
Ich habe Ihre Antwort akzeptiert, obwohl sie bei mir nicht funktioniert hat. Ich vermute, mein System wurde gerade abgespritzt, aber ich bin auf einen neuen Computer umgezogen und jetzt funktioniert alles einwandfrei.
Jim McKeeth
38
@jim Ich bin mir nicht sicher, ob Sie das gleiche Problem hatten, aber ich habe eine lächerliche Zeit verbracht, bevor mir klar wurde, dass die XML-Datei im Editor geöffnet sein muss und der Fokus im Editor liegen muss, wenn Sie das Eigenschaftenfenster aufrufen. Erst dann erhalten Sie die Eigenschaften "XML-Dokument", in denen Sie ein Schema zuweisen können. Wenn der Fokus im Projektmappen-Explorer liegt, werden im Eigenschaftenfenster nur die Dateieigenschaften angezeigt, dh dort ist keine Schemazuweisung möglich.
Herzbube
2
Ich denke, Sie sollten die Ergebnisse von @ herzbube in die Antwort selbst aufnehmen.
Ashish
35

Sie müssen die Dateien in Visual Studio nicht manuell zuordnen. Eine XML-Datei wird automatisch mit einer XSD-Datei abgeglichen, wenn beide geöffnet sind und Ihr Namespace korrekt definiert ist.

So definieren Sie den Namespace:

Im Stammelement der XML-Datei:

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

Im Schemaelement der 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 Ihrem Schema, wenn Sie einen targetNamespace haben

Da Sie targetNamespacein Ihrem Schema ein angeben, muss allen Verweisen auf im Schema definierte Typen ein Namespace vorangestellt werden (weshalb wir das xmlns:thisAttribut im obigen <xs:schema />Element 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" />
Ross McNab
quelle
3

Ein weiterer Fehlerpunkt ist, dass Windows 7 Schemadateien "blockiert". Klicken Sie mit der rechten Maustaste auf die xsd-Datei auf der Festplatte, Eigenschaften> Allgemein. Wenn sie blockiert ist, wird die Schaltfläche "Entsperren" angezeigt. Dies führte dazu, dass meine XML-Validierung in VS2012 fehlschlug.

EJA
quelle
1

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

Beispiele:

XSD :

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

XML :

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

Siehe auch: XML / XSD Intellisense funktioniert in Visual Studio 2010 nicht

k3b
quelle
0

Ich hatte das gleiche Problem, aber VS hat mein Schema bereits korrekt referenziert. Es stellte sich heraus, dass die Datei, die ich überprüfen wollte, keine XML-Dateierweiterung hatte. Am Ende meines Dateinamens wurde .xml hinzugefügt, und die Validierung begann zu funktionieren.

John Livermore
quelle