web-dev-qa-db-de.com

XML-Validierung mit XSD in Visual Studio IDE

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 stelle ich Visual IDE) ein, um mich über Validierungsfehler zu benachrichtigen, und stelle dann eine Intellisense-Liste gültiger Tags und Attribute in einem bestimmten Kontext bereit?

Was ich ausprobiert habe:

  • Ich habe die XSDs mit dem XML-Dokument zum Projekt hinzugefügt.
  • Ich habe die XSDs zur XML-Schemaliste 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 Debug- oder Bearbeitungsinformationen auf. Ich habe es sowohl 2010 als auch 2008 versucht (ich habe es schon 2008 gemacht, dachte ich)

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

92
Jim McKeeth

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

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

    XML Properties > Schema

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

    XML Schema Selector

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

  4. Sobald dies alles erledigt ist, sollte der Visual Studio-XML-Editor Probleme mit Ihrem XML-Code im Editor mit blauen Schnörkeln hervorheben:

    Example of Error

132
marc_s

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

So definieren Sie den Namespace:

Im Wurzelelement 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 Types in Ihrem Schema, wenn Sie einen targetNamespace haben

Da Sie in Ihrem Schema ein targetNamespace angeben, muss allen Verweisen auf im Schema definierte Typen ein Namespace vorangestellt werden (aus diesem Grund haben wir das xmlns:this Attribut im obigen <xs:schema /> Element).

<!-- 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" />
33
Ross McNab

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

3
EJA

Enthält Ihre XSD ein Attribut "targetNamespace"/schema/@targetNamespace das ist ähnlich wie der Namespace, 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

1
k3b

Ich hatte das gleiche Problem, aber VS hat mein Schema bereits korrekt referenziert. Es stellte sich heraus, dass die zu überprüfende Datei keine XML-Dateierweiterung hatte. .Xml wurde an das Ende meines Dateinamens angehängt, und die Validierung begann zu funktionieren.

0
John Livermore