Extensions.GetSchemaInfo Método

Definição

Obtém o PSVI (infoset de validação pós-esquema) de um nó validado.

Sobrecargas

GetSchemaInfo(XAttribute)

Obtém o PSVI (infoset de validação pós-esquema) de um atributo validado.

GetSchemaInfo(XElement)

Obtém o PSVI (post-schema-validation infoset) de um elemento validado.

Comentários

Depois de validar um XDocument, você poderá recuperar o conjunto de informações pós-validação de esquema para um XElement ou XAttribute que está contido no documento.

Depois de recuperar o IXmlSchemaInfo objeto, você pode usar as SchemaAttribute propriedades ou SchemaElement para obter um tipo de validação parcial (XmlSchemaElement ou XmlSchemaAttribute). Você pode usar os tipos parciais de validação para validar um atributo ou uma subárvore.

GetSchemaInfo(XAttribute)

Obtém o PSVI (infoset de validação pós-esquema) de um atributo validado.

public static System.Xml.Schema.IXmlSchemaInfo? GetSchemaInfo (this System.Xml.Linq.XAttribute source);
public static System.Xml.Schema.IXmlSchemaInfo GetSchemaInfo (this System.Xml.Linq.XAttribute source);

Parâmetros

source
XAttribute

Um XAttribute que foi validado anteriormente.

Retornos

IXmlSchemaInfo

Um IXmlSchemaInfo que contém o infoset de validação pós-esquema para um XAttribute.

Comentários

Você pode usar o IXmlSchemaInfo retornado por esse método para determinar determinadas características de um atributo validado. Por exemplo, você pode determinar se o atributo veio de um valor de atributo padrão em um XSD.

Você usa a SchemaAttribute propriedade para obter um tipo de validação parcial (XmlSchemaAttribute). Você pode usá-lo para revalidar um atributo sem validar um documento inteiro.

Para obter um exemplo dessa propriedade, consulte Validate.

Aplica-se a

.NET 7 e outras versões
Produto Versões
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1

GetSchemaInfo(XElement)

Obtém o PSVI (post-schema-validation infoset) de um elemento validado.

public static System.Xml.Schema.IXmlSchemaInfo? GetSchemaInfo (this System.Xml.Linq.XElement source);
public static System.Xml.Schema.IXmlSchemaInfo GetSchemaInfo (this System.Xml.Linq.XElement source);

Parâmetros

source
XElement

Um XElement que foi validado anteriormente.

Retornos

IXmlSchemaInfo

Uma IXmlSchemaInfo que contém o PSVI (post-schema-validation infoset) para um XElement.

Exemplos

O exemplo a seguir popula a árvore com um 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.

                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);  
}  

Esse exemplo gera a saída a seguir:

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

Você pode usar o IXmlSchemaInfo retornado por este método para determinar determinadas características de um elemento validado. Por exemplo, você pode determinar o tipo de esquema dinâmico do elemento.

Você usa a SchemaElement propriedade para obter um tipo de validação parcial (XmlSchemaElement). Você pode usá-lo para revalidar uma subconsulta com um elemento em sua raiz sem validar um documento inteiro.

Para obter um exemplo dessa propriedade, consulte Validate.

Aplica-se a

.NET 7 e outras versões
Produto Versões
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1