Прочитать на английском

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


Проверка по XML-схеме (XSD) с помощью XmlSchemaSet

XML-документы можно проверять на соответствие схеме XML в классе XmlSchemaSet.

Проверка XML-документов

Проверка XML-документов выполняется с помощью метода Create класса XmlReader. Чтобы выполнить проверку XML-документа, создайте объект XmlReaderSettings, содержащий схему XML, с помощью которой выполняется проверка XML-документа.

Примечание

Пространство имен System.Xml.Schema содержит методы расширений, которые упрощают проверку XML-дерева по файлу XSD при использовании LINQ to XML (C#) и LINQ to XML (Visual Basic). Дополнительные сведения о проверке XML-документов с помощью LINQ to XML см. в статье "Как проверить использование XSD (LINQ to XML) (C#) и Практическое руководство. Проверка использования XSD (LINQ to XML) (Visual Basic).

Отдельную схему или набор схем (например, класс XmlSchemaSet) можно добавить в класс XmlSchemaSet, передав ее в качестве параметра метода Add метод XmlSchemaSet. При проверке документа целевое пространство имен документа должно соответствовать целевому пространству имен схемы в наборе схем.

Далее приведен пример XML-документа.

<bookstore xmlns="http://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>

Далее приведена схема, по которой проверяется XML-документ из примера.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://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>

В следующем примере кода приведенная выше схема добавляется к свойству Schemas объекта XmlReaderSettings. Объект XmlReaderSettings передается в качестве параметра в метод Create объекта XmlReader, который проверяет XML-документ.

Свойство ValidationType объекта XmlReaderSettings устанавливается в Schema, чтобы включить проверку XML-документа в методе Create объекта XmlReader. Обработчик ValidationEventHandler добавляется в объект XmlReaderSettings, чтобы обрабатывать все события Warning или Error, вызванные в результате ошибок, найденных при проверке XML-документа и схемы.

using System;
using System.Xml;
using System.Xml.Schema;

class XmlSchemaSetExample
{
    static void Main()
    {
        XmlReaderSettings booksSettings = new XmlReaderSettings();
        booksSettings.Schemas.Add("http://www.contoso.com/books", "books.xsd");
        booksSettings.ValidationType = ValidationType.Schema;
        booksSettings.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);
        }
    }
}

См. также