次の方法で共有


XmlSchemaSet を使用した XML スキーマ (XSD) の検証

XML ドキュメントは、 XmlSchemaSetの XML スキーマ定義言語 (XSD) スキーマに対して検証できます。

XML ドキュメントを検証する

XML ドキュメントは、Create クラスのXmlReader メソッドによって検証されます。 XML ドキュメントを検証するには、XML ドキュメントの検証に使用する XML スキーマ定義言語 (XSD) スキーマを含む XmlReaderSettings オブジェクトを作成します。

System.Xml.Schema名前空間には拡張メソッドが含まれており、LINQ to XML (C#) と LINQ to XML (Visual Basic) を使用するときに、XSD ファイルに対して XML ツリーを簡単に検証できます。 LINQ to XML を使用して XML ドキュメントを検証する方法の詳細については、「 XSD (LINQ to XML) を使用して検証する方法 (C#) 」および 「方法: XSD を使用して検証する (LINQ to XML) (Visual Basic)」を参照してください。

個々のスキーマまたはスキーマのセット (XmlSchemaSet) は、XmlSchemaSetAdd メソッドにパラメーターとして渡すことによって、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 オブジェクトは、上記の XML ドキュメントを検証するCreate オブジェクトのXmlReader メソッドにパラメーターとして渡されます。

ValidationType オブジェクトの XmlReaderSettings プロパティは、Schema オブジェクトの Create メソッドによる XML ドキュメントの検証を強制するためにXmlReaderに設定されます。 XML ドキュメントとスキーマの両方の検証プロセス中に見つかったエラーによって発生したValidationEventHandlerまたはXmlReaderSettingsイベントを処理するために、WarningError オブジェクトに追加されます。

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);
        }
    }
}
Imports System.Xml
Imports System.Xml.Schema

Class XmlSchemaSetExample

    Shared Sub Main()

        Dim booksSettings As XmlReaderSettings = New XmlReaderSettings()
        booksSettings.Schemas.Add("http://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

こちらも参照ください