Поделиться через


Проверка по нескольким XML-схемам (XSD)

Обновлен: November 2007

Можно использовать объект XmlValidatingReader, чтобы проверить XML-документы с помощью схем XSD из нескольких схем.

wc8csdkz.alert_note(ru-ru,VS.90).gifПримечание.

Класс XmlValidatingReader в версии .NET Framework, версия 2.0 устарел. Экземпляр XmlReader для проверки можно создать с помощью класса XmlReaderSettings и метода Create. Дополнительные сведения см. в разделе Проверка XML-данных с помощью XmlReader.

Пример

В следующем примере кода создается объект XmlValidatingReader, который принимает файловый поток Mixed.xml в качестве входных данных и проверяет фрагменты XML-документа с помощью нескольких источников схем. Конструктор объекта XmlValidatingReader принимает поток фрагментов XML-документа, объект XmlNodeType и объект XmlParserContext.

wc8csdkz.alert_note(ru-ru,VS.90).gifПримечание.

В следующем примере элемент верхнего уровня не проверяется. Объект XmlValidatingReader выдает предупреждение для корневого элемента, если свойство ValidationType имеет значение ValidationType.Schema.

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);
      }
   }
}

Ниже выделяется содержимое файла схемы XML Book.xsd, по которому будет выполнена проверка.

<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>

Ниже выделяется содержимое файла схемы XML Tape.xsd, по которому будет выполнена проверка.

<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>

Ниже выделяется содержимое потока XML Mixed.xml, содержащего XML-фрагменты, которые будут проверены.

<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>

См. также

Основные понятия

Чтение XML с помощью XmlReader

Другие ресурсы

Использование класса XmlReader