2009-05-05 9 views

risposta

20

Caricare il documento, e quindi utilizzare XDocument.Validate, passando in un XmlSchemaSet per rappresentare gli schemi che si desidera convalidare contro, e un ValidationEventHandler di reagire in modo appropriato a eventuali problemi di convalida.

C'è un MSDN article con un esempio e una discussione completi.

15

Solo una nota sulla risposta di cui sopra. È corretto ma può essere fonte di confusione. XDocument.Validate è un metodo di estensione che esiste nello spazio dei nomi System.Xml.Schema. Se non si utilizza questo spazio dei nomi, il metodo Validate non verrà visualizzato in intellisense. Pensavo solo che avrei aiutato quelli che erano confusi quanto me. :)

2

Quindi il codice è qui.

Da Jon Skeets risposta e 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

Ho file XSD, usando 'flusso var = new StreamReader (pathXSD)' *** *** non funziona – Kiquenet

Problemi correlati