Vorgehensweise: Überprüfen mit XSD (LINQ to XML) (C#)How to: Validate Using XSD (LINQ to XML) (C#)

Der System.Xml.Schema-Namespace enthält Erweiterungsmethoden, die ein einfaches Validieren von XML-Strukturen anhand von XSD-Dateien ermöglichen.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. Weitere Informationen finden Sie in der Dokumentation zur Validate-Methode.For more information, see the Validate method documentation.

BeispielExample

Das folgende Beispiel erstellt ein XmlSchemaSet und validiert dann anhand des Schemasatzes die beiden XDocument-Objekte.The following example creates an XmlSchemaSet, then validates two XDocument objects against the schema set. Eines der Dokumente ist gültig, das andere nicht.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");  

Dieses Beispiel erzeugt die folgende Ausgabe: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  

BeispielExample

In dem folgenden Beispiel wird überprüft, ob das XML-Dokument aus Beispiel-XML-Datei: Kunden und Bestellungen (LINQ to XML) laut dem Schema aus Beispiel-XSD-Datei: Kunden und Bestellungen gültig ist.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. Anschließend ändert das Beispiel das XML-Quelldokument.It then modifies the source XML document. Dabei wird das CustomerID-Attribut für den ersten Kunden geändert.It changes the CustomerID attribute on the first customer. Nach der Änderung verweisen die Aufträge auf einen Kunden, der nicht existiert, sodass das XML-Dokument nicht mehr als gültig angesehen wird.After the change, orders will then refer to a customer that does not exist, so the XML document will no longer validate.

In diesem Beispiel wird das folgende XML-Dokument verwendet: Beispiel-XML-Datei: Kunden und Bestellungen (LINQ to XML).This example uses the following XML document: Sample XML File: Customers and Orders (LINQ to XML).

In diesem Beispiel wird das folgende XSD-Schema verwendet: Beispiel-XSD-Datei: Kunden und Bestellungen.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");  

Dieses Beispiel erzeugt die folgende Ausgabe: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  

Siehe auchSee Also

Validate
Creating XML Trees (C#) (Erstellen von XML-Strukturen (C#))Creating XML Trees (C#)