2009-05-05 17 views

Odpowiedz

20

Załaduj dokument, a następnie użyj XDocument.Validate, przechodząc w XmlSchemaSet do reprezentowania schematów, które chcesz potwierdzić przed i ValidationEventHandler odpowiednio reagować na wszelkie problemy walidacji.

Istnieje MSDN article z pełnym przykładem i dyskusją.

15

Tylko uwaga na temat powyższej odpowiedzi. Jest poprawny, ale może być mylący. XDocument.Validate jest metodą rozszerzenia istniejącą w przestrzeni nazw System.Xml.Schema. Jeśli nie używasz tej przestrzeni nazw, metoda sprawdzania poprawności nie pojawi się w systemie intellisense. Pomyślałem, że pomogę tym, którzy byli tak zdezorientowani jak ja. :)

2

Kod jest tutaj.

Od Jon Skeets odpowiedź i MSDN http://msdn.microsoft.com/en-us/library/system.xml.linq.xdocument.validate.aspx

var 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>"; 
var schemas = new XmlSchemaSet(); 
schemas.Add("", XmlReader.Create(new StringReader(xsdMarkup))); 

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

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

Console.WriteLine("Validating doc1"); 
var 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"); 
+0

mam pliku XSD, przy użyciu 'strumień var = new StreamReader (pathXSD)' *** *** nie działa – Kiquenet

Powiązane problemy