Extensions.GetSchemaInfo Metoda

Definicja

Pobiera sprawdzonych (PSVI) zweryfikowanego węzła.Gets the post-schema-validation infoset (PSVI) of a validated node.

Przeciążenia

GetSchemaInfo(XAttribute)

Pobiera wartość sprawdzonych (PSVI) poprawnego atrybutu.Gets the post-schema-validation infoset (PSVI) of a validated attribute.

GetSchemaInfo(XElement)

Pobiera sprawdzonych (PSVI) zweryfikowanego elementu.Gets the post-schema-validation infoset (PSVI) of a validated element.

Uwagi

Po sprawdzeniu poprawności XDocumentmożna pobrać sprawdzonych poprawność po schemacie XElement dla lub XAttribute , który jest zawarty w dokumencie.After you have validated an XDocument, you can retrieve the post-schema-validation infoset for an XElement or XAttribute that is contained in the document.

Po pobraniu IXmlSchemaInfo obiektu można SchemaAttribute użyć właściwości lub SchemaElement , aby uzyskać typ częściowej walidacji (XmlSchemaElement lub XmlSchemaAttribute).After retrieving the IXmlSchemaInfo object, you can use the SchemaAttribute or SchemaElement properties to get a partial validation type (XmlSchemaElement or XmlSchemaAttribute). Aby sprawdzić poprawność atrybutu lub poddrzewa, można użyć typów częściowej walidacji.You can use the partial validation types to validate an attribute or a sub-tree.

GetSchemaInfo(XAttribute)

Pobiera wartość sprawdzonych (PSVI) poprawnego atrybutu.Gets the post-schema-validation infoset (PSVI) of a validated attribute.

public:
[System::Runtime::CompilerServices::Extension]
 static System::Xml::Schema::IXmlSchemaInfo ^ GetSchemaInfo(System::Xml::Linq::XAttribute ^ source);
public static System.Xml.Schema.IXmlSchemaInfo GetSchemaInfo (this System.Xml.Linq.XAttribute source);
static member GetSchemaInfo : System.Xml.Linq.XAttribute -> System.Xml.Schema.IXmlSchemaInfo
<Extension()>
Public Function GetSchemaInfo (source As XAttribute) As IXmlSchemaInfo

Parametry

source
XAttribute

XAttribute Który został wcześniej sprawdzony.An XAttribute that has been previously validated.

Zwraca

A IXmlSchemaInfo , który zawiera sprawdzonych po walidacji schematu XAttributedla.A IXmlSchemaInfo that contains the post-schema-validation infoset for an XAttribute.

Uwagi

Można użyć IXmlSchemaInfo zwrócone przez tę metodę, aby określić pewne cechy zweryfikowanego atrybutu.You can use the IXmlSchemaInfo returned by this method to determine certain characteristics of a validated attribute. Na przykład można określić, czy atrybut pochodzi z domyślnej wartości atrybutu w XSD.For example, you can determine if the attribute came from a default attribute value in an XSD.

Użyj właściwości, SchemaAttribute Aby uzyskać typ częściowej walidacji (XmlSchemaAttribute).You use the SchemaAttribute property to get a partial validation type (XmlSchemaAttribute). Za jego pomocą można ponownie sprawdzić poprawność atrybutu bez weryfikowania całego dokumentu.You can use it to revalidate an attribute without validating an entire document.

Przykład tej właściwości można znaleźć w temacie Validate.For an example of this property, see Validate.

GetSchemaInfo(XElement)

Pobiera sprawdzonych (PSVI) zweryfikowanego elementu.Gets the post-schema-validation infoset (PSVI) of a validated element.

public:
[System::Runtime::CompilerServices::Extension]
 static System::Xml::Schema::IXmlSchemaInfo ^ GetSchemaInfo(System::Xml::Linq::XElement ^ source);
public static System.Xml.Schema.IXmlSchemaInfo GetSchemaInfo (this System.Xml.Linq.XElement source);
static member GetSchemaInfo : System.Xml.Linq.XElement -> System.Xml.Schema.IXmlSchemaInfo
<Extension()>
Public Function GetSchemaInfo (source As XElement) As IXmlSchemaInfo

Parametry

source
XElement

XElement Który został wcześniej sprawdzony.An XElement that has been previously validated.

Zwraca

A IXmlSchemaInfo , który zawiera sprawdzonych (PSVI) XElementdla.A IXmlSchemaInfo that contains the post-schema-validation infoset (PSVI) for an XElement.

Przykłady

Poniższy przykład wypełnia drzewo PSVI.The following example populates the tree with a PSVI. Po walidacji drukuje wszystkie elementy i atrybuty w drzewie, które są nieprawidłowe zgodnie z 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  

Ten przykład generuje następujące wyniki: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  

Uwagi

Można użyć IXmlSchemaInfo zwrócone przez tę metodę, aby określić pewne cechy zweryfikowanego elementu.You can use the IXmlSchemaInfo returned by this method to determine certain characteristics of a validated element. Na przykład można określić dynamiczny typ schematu elementu.For example, you can determine the dynamic schema type of the element.

Użyj właściwości, SchemaElement Aby uzyskać typ częściowej walidacji (XmlSchemaElement).You use the SchemaElement property to get a partial validation type (XmlSchemaElement). Za jego pomocą można ponownie sprawdzić poprawność poddrzewa z elementem w jego katalogu głównym bez weryfikowania całego dokumentu.You can use it to revalidate a sub-tree with an element at its root without validating an entire document.

Przykład tej właściwości można znaleźć w temacie Validate.For an example of this property, see Validate.

Dotyczy