方法: XSD を使用して検証する (LINQ to XML) (C#)How to: Validate Using XSD (LINQ to XML) (C#)

System.Xml.Schema 名前空間には、XML スキーマ定義言語 (XSD) ファイルに対して XML ツリーを簡単に検証できる拡張メソッドが含まれています。The System.Xml.Schema namespace contains extension methods that make it easy to validate an XML tree against an XML Schema Definition Language (XSD) file. 詳細については、Validate メソッドのドキュメントを参照してください。For more information, see the Validate method documentation.

Example

次の例では、XmlSchemaSet を作成し、このスキーマ セットに対して 2 つの XDocument オブジェクトを検証します。The following example creates an XmlSchemaSet, then validates two XDocument objects against the schema set. ドキュメントの 1 つは有効ですが、その他のドキュメントは無効です。One of the documents is valid, the other is not.

string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:sequence>  
          <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>  
          <xsd:element name='Child2' minOccurs='1' maxOccurs='1'/>  
         </xsd:sequence>  
        </xsd:complexType>  
       </xsd:element>  
      </xsd:schema>";  
XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup)));  

XDocument doc1 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child2", "content1")  
    )  
);  

XDocument doc2 = new XDocument(  
    new XElement("Root",  
        new XElement("Child1", "content1"),  
        new XElement("Child3", "content1")  
    )  
);  

Console.WriteLine("Validating doc1");  
bool errors = false;  
doc1.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     });  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Validating doc2");  
errors = false;  
doc2.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     });  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  

この例を実行すると、次の出力が生成されます。This example produces the following output:

Validating doc1  
doc1 validated  

Validating doc2  
The element 'Root' has invalid child element 'Child3'. List of possible elements expected: 'Child2'.  
doc2 did not validate  

Example

次の例では、「サンプル XML ファイル: 顧客と注文 (LINQ to XML)」の XML ドキュメントが「サンプル XSD ファイル : 顧客と注文」のスキーマに従った有効なものであるかどうかを検証します。The following example validates that the XML document from Sample XML File: Customers and Orders (LINQ to XML) is valid per the schema from Sample XSD File: Customers and Orders. 次に、ソース XML ドキュメントを変更します。It then modifies the source XML document. 変更するのは最初の顧客の CustomerID 属性です。It changes the CustomerID attribute on the first customer. 変更が完了すると、存在しない顧客を注文が参照するようになります。したがって、この XML ドキュメントは有効ではなくなります。After the change, orders will then refer to a customer that does not exist, so the XML document will no longer validate.

この例では、「サンプル XML ファイル: 顧客と注文 (LINQ to XML)」の XML ドキュメントを使用します。This example uses the following XML document: Sample XML File: Customers and Orders (LINQ to XML).

この例では、「サンプル XSD ファイル: 顧客と注文」の XSD スキーマを使用します。This example uses the following XSD schema: Sample XSD File: Customers and Orders.

XmlSchemaSet schemas = new XmlSchemaSet();  
schemas.Add("", "CustomersOrders.xsd");  

Console.WriteLine("Attempting to validate");  
XDocument custOrdDoc = XDocument.Load("CustomersOrders.xml");  
bool errors = false;  
custOrdDoc.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     });  
Console.WriteLine("custOrdDoc {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
// Modify the source document so that it will not validate.  
custOrdDoc.Root.Element("Orders").Element("Order").Element("CustomerID").Value = "AAAAA";  
Console.WriteLine("Attempting to validate after modification");  
errors = false;  
custOrdDoc.Validate(schemas, (o, e) =>  
                     {  
                         Console.WriteLine("{0}", e.Message);  
                         errors = true;  
                     });  
Console.WriteLine("custOrdDoc {0}", errors ? "did not validate" : "validated");  

この例を実行すると、次の出力が生成されます。This example produces the following output:

Attempting to validate  
custOrdDoc validated  

Attempting to validate after modification  
The key sequence 'AAAAA' in Keyref fails to refer to some key.  
custOrdDoc did not validate  

参照See Also

Validate
XML ツリーの作成 (C#)Creating XML Trees (C#)