Freigeben über


Validierung eines XML-Schemas (XSD) mit mehreren Schemas

Mit dem XmlValidatingReader können XML-Dokumente anhand von XSD-Schemata (XML Schema Definition Language) von verschiedenen Schemata aus validiert werden.

HinweisHinweis

Die XmlValidatingReader-Klasse ist in .NET Framework, Version 2.0 veraltet.Mit der XmlReaderSettings-Klasse und der Create-Methode können Sie eine XmlReader-Instanz zur Validierung erstellen.Weitere Informationen finden Sie unter Validieren von XML-Daten mit "XmlReader".

Beispiel

Im folgenden Codebeispiel wird ein XmlValidatingReader erstellt, der den Dateistream Mixed.xml als Eingabe verwendet und XML-Fragmente anhand mehrerer Schemaquellen validiert. Der XmlValidatingReader-Konstruktor verwendet einen Stream eines XML-Fragments sowie XmlNodeType und XmlParserContext.

HinweisHinweis

Im folgenden Beispiel wird das Element der obersten Ebene nicht validiert.Wenn ValidationType auf ValidationType.Schema festgelegt ist, gibt der XmlValidatingReader eine Warnung für das Stammelement aus.

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema

Namespace ValidationSample
    
   Class Sample
      
      Public Shared Sub Main()
         Dim stream As New FileStream("Mixed.xml", FileMode.Open)
         Dim vr As New XmlValidatingReader(stream, XmlNodeType.Element, Nothing)
         
         vr.Schemas.Add(Nothing, "Book.xsd")
         vr.Schemas.Add(Nothing, "Tape.xsd")
         vr.ValidationType = ValidationType.Schema
         AddHandler vr.ValidationEventHandler, AddressOf ValidationHandler
         
         While vr.Read()
         End While
         Console.WriteLine("Validation finished")
      End Sub
      ' Main
      
      Public Shared Sub ValidationHandler(sender As Object, args As ValidationEventArgs)
         Console.WriteLine("***Validation error")
         Console.WriteLine("Severity:{0}", args.Severity)
         Console.WriteLine("Message:{0}", args.Message)
      End Sub
      ' ValidationHandler
   End Class
   ' Sample
End Namespace
' ValidationSample
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

namespace ValidationSample
{
   class Sample
   {
      public static void Main()
      {
         FileStream stream = new FileStream("Mixed.xml", FileMode.Open);
         XmlValidatingReader vr = new XmlValidatingReader(stream, XmlNodeType.Element, null);

         vr.Schemas.Add(null, "Book.xsd");
         vr.Schemas.Add(null, "Tape.xsd");
         vr.ValidationType = ValidationType.Schema;
         vr.ValidationEventHandler += new ValidationEventHandler (ValidationHandler);

         while(vr.Read());
         Console.WriteLine("Validation finished");
      }

      public static void ValidationHandler(object sender, ValidationEventArgs args)
      {
         Console.WriteLine("***Validation error");
         Console.WriteLine("\tSeverity:{0}", args.Severity);
         Console.WriteLine("\tMessage:{0}", args.Message);
      }
   }
}

Im folgenden Beispiel wird der Inhalt der XML-Schemadatei Books.xsd dargestellt, die zur Validierung herangezogen wird.

<xs:schema xmlns="urn:bookstore-schema"
         targetNamespace="urn:bookstore-schema"
         xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="book">
      <xs:complexType>
         <xs:simpleContent>
            <xs:extension base="xs:string">
               <xs:attribute name="price" type="xs:decimal" />
            </xs:extension>
         </xs:simpleContent>
      </xs:complexType>
   </xs:element>
</xs:schema>

Im folgenden Beispiel wird der Inhalt der XML-Schemadatei Tape.xsd dargestellt, die zur Validierung herangezogen wird.

<xs:schema xmlns="urn:tapestore-schema"
         targetNamespace="urn:tapestore-schema"
         xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="tape" type="xs:string"/>
</xs:schema>

Im folgenden Beispiel wird der Inhalt des XML-Streams Mixed.xml dargestellt, der die zu validierenden XML-Fragmente enthält.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="urn:dvdstore-schema" targetNamespace="urn:dvdstore-schema">
    <xs:element name="dvd" type="xs:string" />
  </xs:schema>
  <pb:book price="7.99" xmlns:pb="urn:bookstore-schema">The Autobiography of Benjamin Franklin</pb:book>
  <pd:dvd xmlns:pd="urn:dvdstore-schema">The Godfather</pd:dvd>
  <pt:tape xmlns:pt="urn:tapestore-schema" xsi:schemaLocation="urn:tapestore-schema tape.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Il Postino</pt:tape>

Siehe auch

Konzepte

Lesen von XML mit dem "XmlReader"

Weitere Ressourcen

Verwenden der "XmlReader"-Klasse