2009-05-05 12 views

Respuesta

20

carga el documento, y luego usar XDocument.Validate, pasando en un XmlSchemaSet para representar los esquemas desee validar contra, y una ValidationEventHandler para reaccionar apropiadamente a los problemas de validación.

Hay un MSDN article con un ejemplo completo y discusión.

15

Solo una nota acerca de la respuesta anterior. Es correcto, pero puede ser confuso. XDocument.Validate es un método de extensión que existe en el espacio de nombres System.Xml.Schema. Si no usa este espacio de nombres, el método Validate no aparecerá en intellisense. Solo pensé que ayudaría a aquellos que estaban tan confundidos como yo. :)

2

El código está aquí.

De Jon Skeets respuesta y 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

Tengo archivo XSD, usando 'corriente var = new StreamReader (pathXSD)' *** *** no funciona – Kiquenet