visual - vscode check xml




XML-Validierung mit XSD in Visual Studio IDE (4)

Ich weiß, dass ich das schon früher gemacht habe, aber es funktioniert heute nicht, noch kann ich irgendwo finden, dass es erklärt, wie man es macht. Es könnte mein Mangel an Schlaf sein, aber ich vermute Gremlins.

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

Was ich versucht habe:

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

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

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


Ein weiterer Fehlerpunkt ist das Blockieren von Schemadateien durch Windows 7 ... Klicken Sie mit der rechten Maustaste auf die xsd-Datei auf der Festplatte, Eigenschaften> Allgemein, und wenn sie blockiert ist, haben Sie eine Schaltfläche "Entsperren". Dies führte dazu, dass meine XML-Validierung in VS2012 fehlschlug.


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

Beispiel:

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

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

Siehe auch XML / XSD intellisense funktioniert nicht in Visual Studio 2010


Jim,

Sie müssen das XML-Dokument in Visual Studio mit der XSD-Datei verknüpfen, die Sie haben. Sie sollten in Ihrem Eigenschaftenfenster des XML-Dokuments Folgendes sehen:

Im XML-Schemaset-Editor (wird geöffnet, wenn Sie im Textfeld "Schemas" in Ihrem Eigenschaftenfenster auf die Ellipsen (...) klicken) müssen Sie sicherstellen, dass das 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 Option Eine mit dem grünen Häkchen verwenden:

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

Sobald all dies vorhanden ist, sollte der Visual Studio XML-Editor Probleme mit Ihrem XML im Editor hervorheben, indem Sie blaue Squigglies verwenden:


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

So definieren Sie den Namespace:

Im Wurzelelement der XML-Datei:

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

Im Schema-Element 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 in Ihrem Schema einen targetNamespace , müssen alle Verweise auf im Schema definierte Typen ein Namespace vorangestellt werden (deshalb haben wir das Attribut xmlns:this im obigen <xs:schema /> -Element hinzugefügt).

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




xsd-validation