2009-05-05 6 views

Répondre

20

Chargez le document, puis utiliser XDocument.Validate, en passant dans un XmlSchemaSet pour représenter les schémas que vous souhaitez valider contre, et un ValidationEventHandler de réagir de manière appropriée à tout problème de validation. Il y a un MSDN article avec un exemple complet et une discussion.

15

Juste une note sur la réponse ci-dessus. C'est correct mais peut être déroutant. XDocument.Validate est une méthode d'extension qui existe dans l'espace de noms System.Xml.Schema. Si vous n'utilisez pas cet espace de noms, la méthode Validate n'apparaîtra pas dans intellisense. Je pensais juste aider ceux qui étaient aussi confus que moi. :)

2

Donc le code est ici.

De réponse Jon Skeets et 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

Je fichier XSD, en utilisant 'flux var = new StreamReader (pathXSD)' *** *** ne fonctionne pas – Kiquenet

Questions connexes