Extensions.Validate Método

Definição

Valida se um XDocument, um XElement ou um XAttribute está em conformidade com um XSD em um XmlSchemaSet.Validates that an XDocument, an XElement, or an XAttribute conforms to an XSD in an XmlSchemaSet.

Sobrecargas

Validate(XDocument, XmlSchemaSet, ValidationEventHandler)

Esse método valida se um XDocument está em conformidade com um XSD em um XmlSchemaSet.This method validates that an XDocument conforms to an XSD in an XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

Esse método valida que um XAttribute está em conformidade com um XmlSchemaObject e um XmlSchemaSet especificados.This method validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet.

Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean)

Valida que um XDocument está em conformidade com um XSD em um XmlSchemaSet, opcionalmente, preenchendo a árvore XML com o PSVI (post-schema-validation infoset).Validates that an XDocument conforms to an XSD in an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

Esse método valida que uma subárvore XElement está em conformidade com um XmlSchemaObject e um XmlSchemaSet especificados.This method validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet.

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

Valida se um XAttribute está em conformidade com um XmlSchemaObject e XmlSchemaSet especificados, opcionalmente, populando a árvore XML com o PSVI (infoset de validação pós-esquema).Validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

Valida se uma subárvore XElement está em conformidade com um XmlSchemaObject e XmlSchemaSet especificados, opcionalmente, populando a árvore XML com o PSVI (infoset de validação pós-esquema).Validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

Comentários

Esses métodos usam um subjacente XmlReader para validar a árvore XML em relação a um XSD.These methods use an underlying XmlReader to validate the XML tree against an XSD.

Mensagens de aviso e erro de validação são manipuladas usando o ValidationEventHandler delegado.Validation error and warning messages are handled using the ValidationEventHandler delegate. Se nenhum manipulador de eventos for fornecido a esses métodos, os erros de validação serão expostos como um XmlSchemaValidationException .If no event handler is provided to these methods, validation errors are exposed as an XmlSchemaValidationException. Os avisos de validação não causam XmlSchemaValidationException a geração de um a ser lançado.Validation warnings do not cause an XmlSchemaValidationException to be thrown.

Alguns desses métodos de extensão permitem opcionalmente a população do PSVI (Post-Schema-Validation infoset).Some of these extension methods optionally allow population of the post-schema-validation infoset (PSVI).

Validate(XDocument, XmlSchemaSet, ValidationEventHandler)

Esse método valida se um XDocument está em conformidade com um XSD em um XmlSchemaSet.This method validates that an XDocument conforms to an XSD in an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XDocument ^ source, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XDocument source, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler? validationEventHandler);
public static void Validate (this System.Xml.Linq.XDocument source, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XDocument * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit
<Extension()>
Public Sub Validate (source As XDocument, schemas As XmlSchemaSet, validationEventHandler As ValidationEventHandler)

Parâmetros

source
XDocument

O XDocument a ser validado.The XDocument to validate.

schemas
XmlSchemaSet

Um XmlSchemaSet em relação ao qual validar.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

Um ValidationEventHandler para um evento que ocorre quando o leitor encontra erros de validação.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Se null, gera uma exceção nos erros de validação.If null, throws an exception upon validation errors.

Exceções

Gerado para erros de validação de XSD (linguagem de definição de esquema XML).Thrown for XML Schema Definition Language (XSD) validation errors.

Exemplos

O exemplo a seguir cria um XmlSchemaSet e, em seguida, valida dois objetos XDocument no conjunto de esquemas.The following example creates an XmlSchemaSet, then validates two XDocument objects against the schema set. Um dos documentos é válido, o outro não.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");  
                Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  
    Dim xsdMarkup As XDocument = _  
    <?xml version='1.0'?>  
    <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>  

    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = _  
    <?xml version='1.0'?>  
    <Root>  
        <Child1>content1</Child1>  
        <Child2>content2</Child2>  
    </Root>  

    Dim doc2 As XDocument = _  
    <?xml version='1.0'?>  
    <Root>  
        <Child1>content1</Child1>  
        <Child3>content1</Child3>  
    </Root>  

    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

Esse exemplo gera a saída a seguir: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  

Comentários

Esse método de extensão valida se o XDocument está em conformidade com o modelo de conteúdo do esquema no XmlSchemaSet .This extension method validates that the XDocument conforms to the schema content model in XmlSchemaSet.

Aplica-se a

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

Esse método valida que um XAttribute está em conformidade com um XmlSchemaObject e um XmlSchemaSet especificados.This method validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XAttribute ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XAttribute source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler? validationEventHandler);
public static void Validate (this System.Xml.Linq.XAttribute source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XAttribute * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit
<Extension()>
Public Sub Validate (source As XAttribute, partialValidationType As XmlSchemaObject, schemas As XmlSchemaSet, validationEventHandler As ValidationEventHandler)

Parâmetros

source
XAttribute

O XAttribute a ser validado.The XAttribute to validate.

partialValidationType
XmlSchemaObject

Um XmlSchemaObject que especifica a subárvore a ser validada.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

Um XmlSchemaSet em relação ao qual validar.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

Um ValidationEventHandler para um evento que ocorre quando o leitor encontra erros de validação.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Se null, gera uma exceção nos erros de validação.If null, throws an exception upon validation errors.

Exceções

Gerado para erros de validação de XSD (linguagem de definição de esquema XML).Thrown for XML Schema Definition Language (XSD) validation errors.

Exemplos

                string xsdMarkup =  
    @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:simpleContent>  
          <xsd:extension base='xsd:string'>  
           <xsd:attribute name='Lang' use='required'>  
            <xsd:simpleType>  
             <xsd:restriction base='xsd:token'>  
              <xsd:enumeration value='C#'/>  
              <xsd:enumeration value='VB'/>  
             </xsd:restriction>  
            </xsd:simpleType>  
           </xsd:attribute>  
          </xsd:extension>  
         </xsd:simpleContent>  
        </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 XAttribute("Lang", "C#")  
    )  
);  

Console.WriteLine("Validating doc1 ...");  
bool errors = false;  
doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Validating Lang attribute ...");  
XAttribute lang = doc1.Root.Attribute("Lang");  

errors = false;  
lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  

// the following makes the Lang attribute invalid according to the schema  
lang.Value = "VC";  

Console.WriteLine();  
Console.WriteLine("Validating Lang attribute ...");  

errors = false;  
lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
                Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  
    Dim xsdMarkup As XDocument = _  
      <?xml version='1.0'?>  
      <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
          <xsd:element name='Root'>  
              <xsd:complexType>  
                  <xsd:simpleContent>  
                      <xsd:extension base='xsd:string'>  
                          <xsd:attribute name='Lang' use='required'>  
                              <xsd:simpleType>  
                                  <xsd:restriction base='xsd:token'>  
                                      <xsd:enumeration value='C#'/>  
                                      <xsd:enumeration value='VB'/>  
                                  </xsd:restriction>  
                              </xsd:simpleType>  
                          </xsd:attribute>  
                      </xsd:extension>  
                  </xsd:simpleContent>  
              </xsd:complexType>  
          </xsd:element>  
      </xsd:schema>  

    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root Lang='C#'/>  

    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
    Dim lang As XAttribute = doc1.Root.Attribute("Lang")  

    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  

    ' the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC"  

    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  

    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

Esse exemplo gera a saída a seguir:This example produces the following output:

Validating doc1 ...  
doc1 validated  

Validating Lang attribute ...  
lang validated  

Validating Lang attribute ...  
The 'Lang' attribute is invalid - The value 'VC' is invalid according to its datatype 'Token' - The Enumeration constraint failed.  
lang did not validate  

Comentários

Você pode usar esse método para validar que XAttribute está em conformidade com um esquema.You can use this method to validate that an XAttribute conforms to a schema. Normalmente, você usa esse método quando modificou um atributo e deseja certificar-se de que ele ainda está em conformidade com seu esquema.You typically use this method when you have modified an attribute, and you want to make sure that it still conforms to its schema. Você pode validar o documento inteiro, mas leva menos tempo de processamento para validar apenas o atributo.You could validate the entire document, but it takes less processing time to validate just the attribute.

Se você passar null para validationEventHandler o, esse método gerará uma exceção nos erros de validação.If you pass null for validationEventHandler, this method raises an exception upon validation errors. Avisos de validação não gerarão uma exceção.Validation warnings will not raise an exception.

Para validar um atributo, use uma instância do XmlSchemaObject .To validate an attribute, you use an instance of XmlSchemaObject. Você pode obter essa instância de várias maneiras.You can obtain this instance in various ways. Uma maneira fácil é a seguinte:An easy way is as follows:

  1. Valide se um documento está em conformidade com um esquema.Validate that a document conforms to a schema.

  2. Adicione o PSVI (pós-esquema-validação infoset) chamando o Validate método de extensão.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. Chame o GetSchemaInfo método de extensão para recuperar um objeto que implementa IXmlSchemaInfo .Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. A partir do objeto recuperado, você pode obter um XmlSchemaObject .From the retrieved object, you can get an XmlSchemaObject.

Depois de ter uma instância de um XmlSchemaObject , você pode usar esse método para validar um atributo.After you have an instance of an XmlSchemaObject, you can use this method to validate an attribute.

Aplica-se a

Validate(XDocument, XmlSchemaSet, ValidationEventHandler, Boolean)

Valida que um XDocument está em conformidade com um XSD em um XmlSchemaSet, opcionalmente, preenchendo a árvore XML com o PSVI (post-schema-validation infoset).Validates that an XDocument conforms to an XSD in an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XDocument ^ source, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XDocument source, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler? validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XDocument source, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XDocument * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit
<Extension()>
Public Sub Validate (source As XDocument, schemas As XmlSchemaSet, validationEventHandler As ValidationEventHandler, addSchemaInfo As Boolean)

Parâmetros

source
XDocument

O XDocument a ser validado.The XDocument to validate.

schemas
XmlSchemaSet

Um XmlSchemaSet em relação ao qual validar.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

Um ValidationEventHandler para um evento que ocorre quando o leitor encontra erros de validação.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Se null, gera uma exceção nos erros de validação.If null, throws an exception upon validation errors.

addSchemaInfo
Boolean

Um Boolean indicando se deve popular o PSVI (post-schema-validation infoset).A Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

Exceções

Gerado para erros de validação de XSD (linguagem de definição de esquema XML).Thrown for XML Schema Definition Language (XSD) validation errors.

Exemplos

O exemplo a seguir contém um XSD que define o Child2 elemento com um Att1 atributo com um valor padrão.The following example contains an XSD that defines the Child2 element with an Att1 attribute with a default value. Depois de validar com êxito o documento, o atributo com o valor padrão é adicionado à árvore XML.After successfully validating the document, the attribute with the default value is added to the XML tree. Observe que o atributo padrão não é adicionado ao doc2 , que não é validado em relação ao esquema.Note that the default attribute is not added to doc2, which does not validate against the schema.

                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:complexType>  
            <xsd:simpleContent>  
             <xsd:extension base='xsd:string'>  
              <xsd:attribute name='Att1' default='Att1 Default Value'/>  
             </xsd:extension>  
            </xsd:simpleContent>  
           </xsd:complexType>  
          </xsd:element>  
         </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", "c1"),  
        new XElement("Child2", "c2")  
    )  
);  

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;  
                           }, 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;  
                     }, true);  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Contents of doc1:");  
Console.WriteLine(doc1);  

Console.WriteLine();  
Console.WriteLine("Contents of doc2:");  
Console.WriteLine(doc2);  
                Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  
    Dim xsdMarkup As XDocument = _  
    <?xml version='1.0'?>  
    <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:complexType>  
                            <xsd:simpleContent>  
                                <xsd:extension base='xsd:string'>  
                                    <xsd:attribute name='Att1' default='Att1 Default Value'/>  
                                </xsd:extension>  
                            </xsd:simpleContent>  
                        </xsd:complexType>  
                    </xsd:element>  
                </xsd:sequence>  
            </xsd:complexType>  
        </xsd:element>  
    </xsd:schema>  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root>  
                                <Child1>c1</Child1>  
                                <Child2>c2</Child2>  
                            </Root>  
    Dim doc2 As XDocument = <?xml version='1.0'?>  
                            <Root>  
                                <Child1>content1</Child1>  
                                <Child3>content1</Child3>  
                            </Root>  

    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Contents of doc1:")  
    Console.WriteLine(doc1)  

    Console.WriteLine()  
    Console.WriteLine("Contents of doc2:")  
    Console.WriteLine(doc2)  
End Sub  

Esse exemplo gera a saída a seguir: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  

Contents of doc1:  
<Root>  
  <Child1>c1</Child1>  
  <Child2 Att1="Att1 Default Value">c2</Child2>  
</Root>  

Contents of doc2:  
<Root>  
  <Child1>content1</Child1>  
  <Child3>content1</Child3>  
</Root>  

O exemplo a seguir popula a árvore com PSVI.The following example populates the tree with PSVI. Após a validação, ele imprime todos os elementos e atributos na árvore que são inválidos de acordo com o PSVI.After validation, it prints all elements and attributes in the tree that are invalid according to the PSVI.

                static void DumpInvalidNodes(XElement el)  
{  
    if (el.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
        Console.WriteLine("Invalid Element {0}",  
            el.AncestorsAndSelf()  
            .InDocumentOrder()  
            .Aggregate("", (s, i) => s + "/" + i.Name.ToString()));  
    foreach (XAttribute att in el.Attributes())  
        if (att.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
            Console.WriteLine("Invalid Attribute {0}",  
                att  
                .Parent  
                .AncestorsAndSelf()  
                .InDocumentOrder()  
                .Aggregate("",  
                    (s, i) => s + "/" + i.Name.ToString()) + "/@" + att.Name.ToString()  
                );  
    foreach (XElement child in el.Elements())  
        DumpInvalidNodes(child);  
}  

static void Main(string[] args)  
{  
   string xsdMarkup =  
        @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
           <xsd:simpleType name='GCType'>  
            <xsd:restriction base='xsd:token'>  
             <xsd:enumeration value='AAA'/>  
             <xsd:enumeration value='BBB'/>  
            </xsd:restriction>  
           </xsd:simpleType>  
           <xsd:element name='Root'>  
            <xsd:complexType>  
             <xsd:sequence>  
              <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
               <xsd:complexType>  
                <xsd:sequence>  
                 <xsd:element name='GrandChild1' type='GCType'/>  
                 <xsd:element name='GrandChild2' type='GCType'/>  
                 <xsd:element name='GrandChild3' type='GCType'/>  
                </xsd:sequence>  
               </xsd:complexType>  
              </xsd:element>  
             </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",  
                new XElement("GrandChild1", "AAA"),  
                new XElement("GrandChild2", "ZZZ"),  
                new XElement("GrandChild3", "ZZZ")  
            )  
        )  
    );  

    Console.WriteLine("Validating doc1 ...");  
    bool errors = false;  
    doc1.Validate(schemas, (sender, e) =>  
        {  
            Console.WriteLine(e.Message);  
            errors = true;  
        }, true);  
    Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
}  
                Private Sub DumpInvalidNodes(ByVal el As XElement)  
    If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
        Console.WriteLine("Invalid Element {0}", _  
            el _  
            .AncestorsAndSelf _  
            .InDocumentOrder() _  
            .Aggregate("", _  
                Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()))  
    End If  
    For Each att As XAttribute In el.Attributes()  
        If att.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
            Console.WriteLine("Invalid Attribute {0}", _  
                att _  
                .Parent _  
                .AncestorsAndSelf() _  
                .InDocumentOrder() _  
                .Aggregate("", _  
                    Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()) + _  
                    "/@" + att.Name.ToString())  
        End If  
    Next  
    For Each child As XElement In el.Elements()  
        DumpInvalidNodes(child)  
    Next  
End Sub  

Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:simpleType name='GCType'>  
                <xsd:restriction base='xsd:token'>  
                    <xsd:enumeration value='AAA'/>  
                    <xsd:enumeration value='BBB'/>  
                </xsd:restriction>  
            </xsd:simpleType>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:sequence>  
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'>  
                            <xsd:complexType>  
                                <xsd:sequence>  
                                    <xsd:element name='GrandChild1' type='GCType'/>  
                                    <xsd:element name='GrandChild2' type='GCType'/>  
                                    <xsd:element name='GrandChild3' type='GCType'/>  
                                </xsd:sequence>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  

    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>  
                <GrandChild1>AAA</GrandChild1>  
                <GrandChild2>ZZZ</GrandChild2>  
                <GrandChild3>ZZZ</GrandChild3>  
            </Child1>  
        </Root>  

    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
End Sub  

Esse exemplo gera a saída a seguir:This example produces the following output:

Validating doc1 ...  
The 'GrandChild2' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed.  
The 'GrandChild3' element is invalid - The value 'ZZZ' is invalid according to its datatype 'GCType' - The Enumeration constraint failed.  
doc1 did not validate  
Invalid Element /Root  
Invalid Element /Root/Child1  
Invalid Element /Root/Child1/GrandChild2  
Invalid Element /Root/Child1/GrandChild3  

Comentários

Esse método de extensão valida se o XDocument está em conformidade com o modelo de conteúdo do esquema no XmlSchemaSet .This extension method validates that the XDocument conforms to the schema content model in XmlSchemaSet.

Se addSchemaInfo for true , esse método preencherá a árvore XML com o PSVI (Post-Schema-Validation infoset).If addSchemaInfo is true, this method populates the XML tree with the post-schema-validation infoset (PSVI).

Há duas etapas para preencher a árvore XML com o PSVI.There are two steps to populating the XML tree with the PSVI.

  1. Primeiro, uma anotação é adicionada a todos os nós na árvore para permitir que você chame Extensions.GetSchemaInfo ou Extensions.GetSchemaInfo em um elemento ou atributo na árvore.First, an annotation is added to all nodes in the tree to enable you to call Extensions.GetSchemaInfo or Extensions.GetSchemaInfo on an element or attribute in the tree.

  2. Segundo, os elementos e atributos padrão definidos no XSD são adicionados à árvore XML.Second, default elements and attributes defined in the XSD are added to the XML tree. Chamando um dos GetSchemaInfo métodos, você pode determinar se um elemento ou atributo específico foi adicionado do xsd como um elemento ou atributo padrão.By calling one of the GetSchemaInfo methods, you can determine if a specific element or attribute was added from the XSD as a default element or attribute.

Aplica-se a

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler)

Esse método valida que uma subárvore XElement está em conformidade com um XmlSchemaObject e um XmlSchemaSet especificados.This method validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet.

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XElement ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler);
public static void Validate (this System.Xml.Linq.XElement source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler? validationEventHandler);
public static void Validate (this System.Xml.Linq.XElement source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler);
static member Validate : System.Xml.Linq.XElement * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler -> unit
<Extension()>
Public Sub Validate (source As XElement, partialValidationType As XmlSchemaObject, schemas As XmlSchemaSet, validationEventHandler As ValidationEventHandler)

Parâmetros

source
XElement

O XElement a ser validado.The XElement to validate.

partialValidationType
XmlSchemaObject

Um XmlSchemaObject que especifica a subárvore a ser validada.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

Um XmlSchemaSet em relação ao qual validar.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

Um ValidationEventHandler para um evento que ocorre quando o leitor encontra erros de validação.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Se null, gera uma exceção nos erros de validação.If null, throws an exception upon validation errors.

Exceções

Gerado para erros de validação de XSD (linguagem de definição de esquema XML).Thrown for XML Schema Definition Language (XSD) validation errors.

Exemplos

                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:complexType>  
            <xsd:sequence>  
             <xsd:element name='GrandChild1' minOccurs='1' maxOccurs='1'/>  
             <xsd:element name='GrandChild2' minOccurs='1' maxOccurs='2'/>  
            </xsd:sequence>  
           </xsd:complexType>  
          </xsd:element>  
         </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",  
            new XElement("GrandChild1", "gc"),  
            new XElement("GrandChild2", "gc")  
        )  
    )  
);  

Console.WriteLine("Validating doc1 ...");  
bool errors = false;  
doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Validating Child1 after first edit ...");  
XElement child1 = doc1.Element("Root").Element("Child1");  
child1.Add(new XElement("GrandChild2", "gc"));  
errors = false;  
child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("child1 {0}", errors ? "did not validate" : "validated");  

// the following makes the Child1 element invalid according to the schema  
child1.Add(new XElement("GrandChild3", "gc"));  
Console.WriteLine();  
Console.WriteLine("Validating Child1 after second edit ...");  
child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    });  
Console.WriteLine("child1 {0}", errors ? "did not validate" : "validated");  
                Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  

    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <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:complexType>  
                                <xsd:sequence>  
                                    <xsd:element name='GrandChild1' minOccurs='1' maxOccurs='1'/>  
                                    <xsd:element name='GrandChild2' minOccurs='1' maxOccurs='2'/>  
                                </xsd:sequence>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  

    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>  
                <GrandChild1>gc</GrandChild1>  
                <GrandChild2>gc</GrandChild2>  
            </Child1>  
        </Root>  

    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Validating Child1 after first edit ...")  
    Dim child1 As XElement = doc1.Element("Root").Element("Child1")  
    child1.Add(<GrandChild2>gc</GrandChild2>)  
    errors = False  
    child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, AddressOf XSDErrors)  
    Console.WriteLine("child1 {0}", IIf(errors, "did not validate", "validated"))  

    ' the following makes the Child1 element invalid according to the schema  
    child1.Add(<GrandChild3>gc</GrandChild3>)  
    Console.WriteLine()  
    Console.WriteLine("Validating Child1 after second edit ...")  
    child1.Validate(child1.GetSchemaInfo().SchemaElement, schemas, AddressOf XSDErrors)  
    Console.WriteLine("child1 {0}", IIf(errors, "did not validate", "validated"))  
End Sub  

Esse exemplo gera a saída a seguir:This example produces the following output:

Validating doc1 ...  
doc1 validated  

Validating Child1 after first edit ...  
child1 validated  

Validating Child1 after second edit ...  
The element 'Child1' has invalid child element 'GrandChild3'.  
child1 did not validate  

Comentários

Você pode usar esse método para validar que uma subárvore (com uma XElement em sua raiz) esteja em conformidade com um esquema.You can use this method to validate that a sub-tree (with an XElement at its root) conforms to a schema. Normalmente, você usa esse método quando modificou uma subárvore e deseja certificar-se de que ela ainda está em conformidade com seu esquema.You typically use this method when you have modified a sub-tree, and you want to make sure that it still conforms to its schema. Você pode validar o documento inteiro, mas leva menos tempo de processamento para validar apenas uma subárvore.You could validate the entire document, but it takes less processing time to validate a just a sub-tree.

Se você passar null para validationEventHandler , esse método gerará uma exceção em caso de erros de validação.If you pass null for validationEventHandler, then this method raises an exception upon validation errors. Avisos de validação não gerarão uma exceção.Validation warnings will not raise an exception.

Para validar uma subárvore, use uma instância do XmlSchemaObject .To validate a sub-tree, you use an instance of XmlSchemaObject. Você pode obter essa instância de várias maneiras.You can obtain this instance in various ways. Uma maneira fácil é a seguinte:An easy way is as follows:

  1. Valide se um documento está em conformidade com um esquema.Validate that a document conforms to a schema.

  2. Adicione o PSVI (pós-esquema-validação infoset) chamando o Validate método de extensão.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. Chame o GetSchemaInfo método de extensão para recuperar um objeto que implementa IXmlSchemaInfo .Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. A partir do objeto recuperado, você pode obter um XmlSchemaObject .From the retrieved object, you can get an XmlSchemaObject.

Depois de ter uma instância de um XmlSchemaObject , você pode usar esse método para validar uma subárvore.After you have an instance of an XmlSchemaObject, you can use this method to validate an sub-tree.

Aplica-se a

Validate(XAttribute, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

Valida se um XAttribute está em conformidade com um XmlSchemaObject e XmlSchemaSet especificados, opcionalmente, populando a árvore XML com o PSVI (infoset de validação pós-esquema).Validates that an XAttribute conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XAttribute ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XAttribute source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler? validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XAttribute source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XAttribute * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit
<Extension()>
Public Sub Validate (source As XAttribute, partialValidationType As XmlSchemaObject, schemas As XmlSchemaSet, validationEventHandler As ValidationEventHandler, addSchemaInfo As Boolean)

Parâmetros

source
XAttribute

O XAttribute a ser validado.The XAttribute to validate.

partialValidationType
XmlSchemaObject

Um XmlSchemaObject que especifica a subárvore a ser validada.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

Um XmlSchemaSet em relação ao qual validar.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

Um ValidationEventHandler para um evento que ocorre quando o leitor encontra erros de validação.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Se null, gera uma exceção nos erros de validação.If null, throws an exception upon validation errors.

addSchemaInfo
Boolean

Um Boolean indicando se deve popular o PSVI (post-schema-validation infoset).A Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

Exceções

Gerado para erros de validação de XSD (linguagem de definição de esquema XML).Thrown for XML Schema Definition Language (XSD) validation errors.

Exemplos

                static void DumpInvalidNodes(XElement el)  
{  
    if (el.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
        Console.WriteLine("Invalid Element {0}",  
            el.AncestorsAndSelf()  
            .InDocumentOrder()  
            .Aggregate("", (s, i) => s + "/" + i.Name.ToString()));  
    foreach (XAttribute att in el.Attributes())  
        if (att.GetSchemaInfo().Validity != XmlSchemaValidity.Valid)  
            Console.WriteLine("Invalid Attribute {0}",  
                att  
                .Parent  
                .AncestorsAndSelf()  
                .InDocumentOrder()  
                .Aggregate("",  
                    (s, i) => s + "/" + i.Name.ToString()) + "/@" + att.Name.ToString()  
                );  
    foreach (XElement child in el.Elements())  
        DumpInvalidNodes(child);  
}  

static void Main(string[] args)  
{  
    string xsdMarkup =  
        @"<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
       <xsd:element name='Root'>  
        <xsd:complexType>  
         <xsd:simpleContent>  
          <xsd:extension base='xsd:string'>  
           <xsd:attribute name='Lang' use='required'>  
            <xsd:simpleType>  
             <xsd:restriction base='xsd:token'>  
              <xsd:enumeration value='C#'/>  
              <xsd:enumeration value='VB'/>  
             </xsd:restriction>  
            </xsd:simpleType>  
           </xsd:attribute>  
          </xsd:extension>  
         </xsd:simpleContent>  
        </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 XAttribute("Lang", "C#")  
        )  
    );  

    Console.WriteLine("Validating doc1 ...");  
    bool errors = false;  
    doc1.Validate(schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("doc1 {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  

    Console.WriteLine();  
    Console.WriteLine("Validating Lang attribute ...");  
    XAttribute lang = doc1.Element("Root").Attribute("Lang");  

    errors = false;  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  

    // the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC";  

    Console.WriteLine();  
    Console.WriteLine("Validating Lang attribute ...");  

    errors = false;  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, (sender, e) =>  
    {  
        Console.WriteLine(e.Message);  
        errors = true;  
    }, true);  
    Console.WriteLine("lang {0}", errors ? "did not validate" : "validated");  
    DumpInvalidNodes(doc1.Root);  
}  
                Private Sub DumpInvalidNodes(ByVal el As XElement)  
    If el.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
        Console.WriteLine("Invalid Element {0}", _  
            el _  
            .AncestorsAndSelf _  
            .InDocumentOrder() _  
            .Aggregate("", _  
                Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()))  
    End If  
    For Each att As XAttribute In el.Attributes()  
        If att.GetSchemaInfo.Validity <> XmlSchemaValidity.Valid Then  
            Console.WriteLine("Invalid Attribute {0}", _  
                att _  
                .Parent _  
                .AncestorsAndSelf() _  
                .InDocumentOrder() _  
                .Aggregate("", _  
                    Function(ByVal s, ByVal i) s + "/" + i.Name.ToString()) + _  
                    "/@" + att.Name.ToString())  
        End If  
    Next  
    For Each child As XElement In el.Elements()  
        DumpInvalidNodes(child)  
    Next  
End Sub  

Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  

    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'>  
            <xsd:element name='Root'>  
                <xsd:complexType>  
                    <xsd:simpleContent>  
                        <xsd:extension base='xsd:string'>  
                            <xsd:attribute name='Lang' use='required'>  
                                <xsd:simpleType>  
                                    <xsd:restriction base='xsd:token'>  
                                        <xsd:enumeration value='C#'/>  
                                        <xsd:enumeration value='VB'/>  
                                    </xsd:restriction>  
                                </xsd:simpleType>  
                            </xsd:attribute>  
                        </xsd:extension>  
                    </xsd:simpleContent>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  

    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = <?xml version='1.0'?>  
                            <Root Lang='C#'/>  

    Console.WriteLine("Validating doc1 ...")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  

    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  
    Dim lang As XAttribute = doc1.Element("Root").Attribute("Lang")  

    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  

    ' the following makes the Lang attribute invalid according to the schema  
    lang.Value = "VC"  

    Console.WriteLine()  
    Console.WriteLine("Validating Lang attribute ...")  

    errors = False  
    lang.Validate(lang.GetSchemaInfo().SchemaAttribute, schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("lang {0}", IIf(errors, "did not validate", "validated"))  
    DumpInvalidNodes(doc1.Root)  
End Sub  

Esse exemplo gera a saída a seguir:This example produces the following output:

Validating doc1 ...  
doc1 validated  

Validating Lang attribute ...  
lang validated  

Validating Lang attribute ...  
The 'Lang' attribute is invalid - The value 'VC' is invalid according to its datatype 'Token' - The Enumeration constraint failed.  
lang did not validate  
Invalid Attribute /Root/@Lang  

Comentários

Você pode usar esse método para validar que XAttribute está em conformidade com um esquema.You can use this method to validate that an XAttribute conforms to a schema. Normalmente, você usa esse método quando modificou um atributo e deseja certificar-se de que ele ainda está em conformidade com seu esquema.You typically use this method when you have modified an attribute, and you want to make sure that it still conforms to its schema. Você pode validar o documento inteiro, mas leva menos tempo de processamento para validar apenas o atributo.You could validate the entire document, but it takes less processing time to validate just the attribute.

Se addSchemaInfo for true , esse método preencherá o atributo com o PSVI (Post-Schema-Validation infoset).If addSchemaInfo is true, this method populates the attribute with the post-schema-validation infoset (PSVI). Depois de preencher a árvore XML com o PSVI, você pode chamar Extensions.GetSchemaInfo no atributo validado.After you have populated the XML tree with the PSVI, you can call Extensions.GetSchemaInfo on the validated attribute. Isso será útil se você estiver escrevendo código que dependa de dados retornados pelo GetSchemaInfo .This is useful if you are writing code that relies on data returned by GetSchemaInfo.

Se você passar null para validationEventHandler , esse método gerará uma exceção em caso de erros de validação.If you pass null for validationEventHandler, then this method raises an exception upon validation errors. Avisos de validação não gerarão uma exceção.Validation warnings will not raise an exception.

Para validar um atributo, use uma instância do XmlSchemaObject .To validate an attribute, you use an instance of XmlSchemaObject. Você pode obter essa instância de várias maneiras.You can obtain this instance in various ways. Uma maneira fácil é a seguinte:An easy way is as follows:

  1. Valide se um documento está em conformidade com um esquema.Validate that a document conforms to a schema.

  2. Adicione o PSVI (pós-esquema-validação infoset) chamando o Validate método de extensão.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. Chame o GetSchemaInfo método de extensão para recuperar um objeto que implementa IXmlSchemaInfo .Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. A partir do objeto recuperado, você pode obter um XmlSchemaObject .From the retrieved object, you can get an XmlSchemaObject.

Depois de ter uma instância de um XmlSchemaObject , você pode usar esse método para validar um atributo.After you have an instance of an XmlSchemaObject, you can use this method to validate an attribute.

Aplica-se a

Validate(XElement, XmlSchemaObject, XmlSchemaSet, ValidationEventHandler, Boolean)

Valida se uma subárvore XElement está em conformidade com um XmlSchemaObject e XmlSchemaSet especificados, opcionalmente, populando a árvore XML com o PSVI (infoset de validação pós-esquema).Validates that an XElement sub-tree conforms to a specified XmlSchemaObject and an XmlSchemaSet, optionally populating the XML tree with the post-schema-validation infoset (PSVI).

public:
[System::Runtime::CompilerServices::Extension]
 static void Validate(System::Xml::Linq::XElement ^ source, System::Xml::Schema::XmlSchemaObject ^ partialValidationType, System::Xml::Schema::XmlSchemaSet ^ schemas, System::Xml::Schema::ValidationEventHandler ^ validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XElement source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler? validationEventHandler, bool addSchemaInfo);
public static void Validate (this System.Xml.Linq.XElement source, System.Xml.Schema.XmlSchemaObject partialValidationType, System.Xml.Schema.XmlSchemaSet schemas, System.Xml.Schema.ValidationEventHandler validationEventHandler, bool addSchemaInfo);
static member Validate : System.Xml.Linq.XElement * System.Xml.Schema.XmlSchemaObject * System.Xml.Schema.XmlSchemaSet * System.Xml.Schema.ValidationEventHandler * bool -> unit
<Extension()>
Public Sub Validate (source As XElement, partialValidationType As XmlSchemaObject, schemas As XmlSchemaSet, validationEventHandler As ValidationEventHandler, addSchemaInfo As Boolean)

Parâmetros

source
XElement

O XElement a ser validado.The XElement to validate.

partialValidationType
XmlSchemaObject

Um XmlSchemaObject que especifica a subárvore a ser validada.An XmlSchemaObject that specifies the sub-tree to validate.

schemas
XmlSchemaSet

Um XmlSchemaSet em relação ao qual validar.An XmlSchemaSet to validate against.

validationEventHandler
ValidationEventHandler

Um ValidationEventHandler para um evento que ocorre quando o leitor encontra erros de validação.A ValidationEventHandler for an event that occurs when the reader encounters validation errors. Se null, gera uma exceção nos erros de validação.If null, throws an exception upon validation errors.

addSchemaInfo
Boolean

Um Boolean indicando se deve popular o PSVI (post-schema-validation infoset).A Boolean indicating whether to populate the post-schema-validation infoset (PSVI).

Exceções

Gerado para erros de validação de XSD (linguagem de definição de esquema XML).Thrown for XML Schema Definition Language (XSD) validation errors.

Exemplos

                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:complexType>  
            <xsd:simpleContent>  
             <xsd:extension base='xsd:string'>  
              <xsd:attribute name='Att1' default='Att1 Default Value'/>  
             </xsd:extension>  
            </xsd:simpleContent>  
           </xsd:complexType>  
          </xsd:element>  
         </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", "c1"),  
        new XElement("Child2", "c2")  
    )  
);  

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;  
                     }, 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;  
                     }, true);  
Console.WriteLine("doc2 {0}", errors ? "did not validate" : "validated");  

Console.WriteLine();  
Console.WriteLine("Contents of doc1:");  
Console.WriteLine(doc1);  

Console.WriteLine();  
Console.WriteLine("Contents of doc2:");  
Console.WriteLine(doc2);  
                Dim errors As Boolean = False  

Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)  
    Console.WriteLine("{0}", e.Message)  
    errors = True  
End Sub  

Sub Main()  
    Dim xsdMarkup As XDocument = _  
        <?xml version='1.0'?>  
        <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:complexType>  
                                <xsd:simpleContent>  
                                    <xsd:extension base='xsd:string'>  
                                        <xsd:attribute name='Att1' default='Att1 Default Value'/>  
                                    </xsd:extension>  
                                </xsd:simpleContent>  
                            </xsd:complexType>  
                        </xsd:element>  
                    </xsd:sequence>  
                </xsd:complexType>  
            </xsd:element>  
        </xsd:schema>  
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()  
    schemas.Add("", xsdMarkup.CreateReader)  

    Dim doc1 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>c1</Child1>  
            <Child2>c2</Child2>  
        </Root>  

    Dim doc2 As XDocument = _  
        <?xml version='1.0'?>  
        <Root>  
            <Child1>content1</Child1>  
            <Child3>content1</Child3>  
        </Root>  

    Console.WriteLine("Validating doc1")  
    errors = False  
    doc1.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc1 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Validating doc2")  
    errors = False  
    doc2.Validate(schemas, AddressOf XSDErrors, True)  
    Console.WriteLine("doc2 {0}", IIf(errors, "did not validate", "validated"))  

    Console.WriteLine()  
    Console.WriteLine("Contents of doc1:")  
    Console.WriteLine(doc1)  

    Console.WriteLine()  
    Console.WriteLine("Contents of doc2:")  
    Console.WriteLine(doc2)  
End Sub  

Esse exemplo gera a saída a seguir: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  

Contents of doc1:  
<Root>  
  <Child1>c1</Child1>  
  <Child2 Att1="Att1 Default Value">c2</Child2>  
</Root>  

Contents of doc2:  
<Root>  
  <Child1>content1</Child1>  
  <Child3>content1</Child3>  
</Root>  

Comentários

Você pode usar esse método para validar se uma subárvore (com uma XElement na raiz da subárvore) está em conformidade com um esquema.You can use this method to validate that a sub-tree (with an XElement at the root of the sub-tree) conforms to a schema. Normalmente, você usa esse método quando modificou uma subárvore e deseja certificar-se de que ela ainda está em conformidade com seu esquema.You typically use this method when you have modified a sub-tree, and you want to make sure that it still conforms to its schema. Você pode validar o documento inteiro, mas leva menos tempo de processamento para validar apenas uma subárvore.You could validate the entire document, but it takes less processing time to validate a just a sub-tree.

Se addSchemaInfo for true , esse método preencherá a árvore XML com o PSVI (Post-Schema-Validation infoset).If addSchemaInfo is true, then this method populates the XML tree with the post-schema-validation infoset (PSVI).

Há dois aspectos de popular a árvore XML com o PSVI.There are two aspects of populating the XML tree with the PSVI.

Primeiro, uma anotação é adicionada a todos os nós na árvore, de modo que agora você pode chamar GetSchemaInfo em um elemento ou atributo na árvore.First, an annotation is added to all nodes in the tree such that you can now call GetSchemaInfo on an element or attribute in the tree.

Segundo, os elementos e atributos padrão definidos no XSD são adicionados à árvore XML.Second, default elements and attributes defined in the XSD are added to the XML tree. Chamando um dos GetSchemaInfo métodos, você pode determinar se um elemento ou atributo específico foi adicionado do xsd como um elemento ou atributo padrão.By calling one of the GetSchemaInfo methods, you can determine if a specific element or attribute was added from the XSD as a default element or attribute.

Se você passar null para validationEventHandler , esse método gerará uma exceção em caso de erros de validação.If you pass null for validationEventHandler, then this method raises an exception upon validation errors. Avisos de validação não gerarão uma exceção.Validation warnings will not raise an exception.

Para validar uma subárvore, use uma instância do XmlSchemaObject .To validate a sub-tree, you use an instance of XmlSchemaObject. Você pode obter essa instância de várias maneiras.You can obtain this instance in various ways. Uma maneira fácil é a seguinte:An easy way is as follows:

  1. Valide se um documento está em conformidade com um esquema.Validate that a document conforms to a schema.

  2. Adicione o PSVI (pós-esquema-validação infoset) chamando o Validate método de extensão.Add the post-schema-validation infoset (PSVI) by calling the Validate extension method.

  3. Chame o GetSchemaInfo método de extensão para recuperar um objeto que implementa IXmlSchemaInfo .Call the GetSchemaInfo extension method to retrieve an object that implements IXmlSchemaInfo. A partir do objeto recuperado, você pode obter um XmlSchemaObject .From the retrieved object, you can get an XmlSchemaObject.

Depois de ter uma instância de um XmlSchemaObject , você pode usar esse método para validar uma subárvore..After you have an instance of an XmlSchemaObject, you can use this method to validate a sub-tree..

Aplica-se a