Validierung eines XML-Schemas (XSD) mit "XmlSchemaSet"
XML-Dokumente können anhand eines XSD-Schemas (XML Schema Definition Language) in einem XmlSchemaSet validiert werden.
Validierung von XML-Dokumenten
XML-Dokumente werden von der Create-Methode der XmlReader-Klasse validiert. Wenn Sie ein XML-Dokument validieren möchten, müssen Sie ein XmlReaderSettings-Objekt erstellen, das ein XSD-Schema (XML Schema Definition) enthält, mit dem das XML-Dokument validiert wird.
Hinweis |
---|
Der System.Xml.Schema-Namespace enthält Erweiterungsmethoden, die bei Verwendung von LINQ to XML ein einfaches Validieren einer XML-Struktur anhand einer XSD-Datei ermöglichen.Weitere Informationen zum Validieren von XML-Dokumenten mit LINQ to XML finden Sie unter Vorgehensweise: Validieren mit XSD (LINQ to XML). |
Um einem XmlSchemaSet ein einzelnes Schema oder mehrere Schemas (als XmlSchemaSet) hinzuzufügen, muss eines von beiden als Parameter an die Add-Methode des XmlSchemaSet übergeben werden. Beachten Sie beim Validieren von Dokumenten, dass der Namespace des Dokuments dem Zielnamespace des Schemas im Schemasatz entsprechen muss.
Es folgt ein Beispiel für ein XML-Dokument.
<bookstore xmlns="https://www.contoso.com/books">
<book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
<title>The Autobiography of Benjamin Franklin</title>
<author>
<first-name>Benjamin</first-name>
<last-name>Franklin</last-name>
</author>
<price>8.99</price>
</book>
<book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
<title>The Confidence Man</title>
<author>
<first-name>Herman</first-name>
<last-name>Melville</last-name>
</author>
<price>11.99</price>
</book>
<book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
<title>The Gorgias</title>
<author>
<name>Plato</name>
</author>
<price>9.99</price>
</book>
</bookstore>
Im Folgenden wird das Schema dargestellt, das das XML-Dokument validiert.
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="https://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bookstore">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="name" type="xs:string" />
<xs:element minOccurs="0" name="first-name" type="xs:string" />
<xs:element minOccurs="0" name="last-name" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="price" type="xs:decimal" />
</xs:sequence>
<xs:attribute name="genre" type="xs:string" use="required" />
<xs:attribute name="publicationdate" type="xs:date" use="required" />
<xs:attribute name="ISBN" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Im folgenden Codebeispiel wird das oben genannte Schema der XmlSchemaSet Schemas-Eigenschaft des XmlReaderSettings-Objekts hinzugefügt. Das XmlReaderSettings-Objekt wird als Parameter an die Create-Methode des XmlReader-Objekts übergeben, das das oben genannte XML-Dokument validiert.
Die ValidationType-Eigenschaft des XmlReaderSettings-Objekts wird auf Schema festgelegt, um die Validierung des XML-Dokuments durch die Create-Methode des XmlReader-Objekts zu erzwingen. Dem XmlReaderSettings-Objekt wird ein ValidationEventHandler hinzugefügt, der alle Warning- oder Error-Ereignisse behandelt, die von während der Validierung des XML-Dokuments und des Schemas gefundenen Fehlern ausgelöst werden.
Imports System
Imports System.Xml
Imports System.Xml.Schema
Class XmlSchemaSetExample
Shared Sub Main()
Dim booksSettings As XmlReaderSettings = New XmlReaderSettings()
booksSettings.Schemas.Add("https://www.contoso.com/books", "books.xsd")
booksSettings.ValidationType = ValidationType.Schema
AddHandler booksSettings.ValidationEventHandler, New ValidationEventHandler(AddressOf booksSettingsValidationEventHandler)
Dim books As XmlReader = XmlReader.Create("books.xml", booksSettings)
While books.Read()
End While
End Sub
Shared Sub booksSettingsValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)
If e.Severity = XmlSeverityType.Warning Then
Console.Write("WARNING: ")
Console.WriteLine(e.Message)
ElseIf e.Severity = XmlSeverityType.Error Then
Console.Write("ERROR: ")
Console.WriteLine(e.Message)
End If
End Sub
End Class
using System;
using System.Xml;
using System.Xml.Schema;
class XmlSchemaSetExample
{
static void Main()
{
XmlReaderSettings booksSettings = new XmlReaderSettings();
booksSettings.Schemas.Add("https://www.contoso.com/books", "books.xsd");
booksSettings.ValidationType = ValidationType.Schema;
booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);
XmlReader books = XmlReader.Create("books.xml", booksSettings);
while (books.Read()) { }
}
static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
Console.Write("WARNING: ");
Console.WriteLine(e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
Console.Write("ERROR: ");
Console.WriteLine(e.Message);
}
}
}
#using <System.Xml.dll>
using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;
static void booksSettingsValidationEventHandler( Object^ /*sender*/, ValidationEventArgs^ e )
{
if ( e->Severity == XmlSeverityType::Warning )
{
Console::Write( L"WARNING: " );
Console::WriteLine( e->Message );
}
else
if ( e->Severity == XmlSeverityType::Error )
{
Console::Write( L"ERROR: " );
Console::WriteLine( e->Message );
}
}
int main()
{
XmlReaderSettings^ booksSettings = gcnew XmlReaderSettings;
booksSettings->Schemas->Add( L"https://www.contoso.com/books", L"books.xsd" );
booksSettings->ValidationType = ValidationType::Schema;
booksSettings->ValidationEventHandler += gcnew ValidationEventHandler( booksSettingsValidationEventHandler );
XmlReader^ books = XmlReader::Create( L"books.xml", booksSettings );
while ( books->Read() )
{}
return 0;
}
Siehe auch
Konzepte
"XmlSchemaSet" zur Kompilierung von Schemata