Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Extensions.GetSchemaInfo (XElement)

 

Data di pubblicazione: ottobre 2016

Ottiene la post-schema-validation infoset (PSVI) di un elemento convalidato.

Spazio dei nomi:   System.Xml.Schema
Assembly:  System.Xml.Linq (in System.Xml.Linq.dll)

public static IXmlSchemaInfo GetSchemaInfo(
	this XElement source
)

Parametri

source
Type: System.Xml.Linq.XElement

Un XElement che è stato convalidato in precedenza.

Valore restituito

Type: System.Xml.Schema.IXmlSchemaInfo

Oggetto IXmlSchemaInfo che contiene il post-schema-validation infoset (PSVI) per un XElement.

È possibile utilizzare il IXmlSchemaInfo restituito da questo metodo per determinare alcune caratteristiche di un elemento convalidato. Ad esempio, è possibile determinare il tipo di schema dinamico dell'elemento.

Utilizzare la SchemaElement proprietà per ottenere un tipo di convalida parziale (XmlSchemaElement). Consente di convalidare una sottostruttura ad albero con un elemento la cui radice senza convalidare un intero documento.

Per un esempio di questa proprietà, vedere Validate.

Nell'esempio seguente consente di popolare l'albero con un PSVI. Dopo la convalida, vengono stampati tutti gli elementi e attributi nell'albero che non sono validi in base a un valore 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);
}

Questo esempio produce il seguente 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

.NET Framework
Disponibile da 3.5
Torna all'inizio
Mostra: