Extensions.GetSchemaInfo Yöntem

Tanım

Doğrulanmış bir düğümün şema doğrulama sonrası bilgi kümesini (PSVI) alır.

Aşırı Yüklemeler

GetSchemaInfo(XAttribute)

Doğrulanmış özniteliğin şema doğrulama sonrası bilgi kümesini (PSVI) alır.

GetSchemaInfo(XElement)

Doğrulanmış bir öğenin şema doğrulama sonrası bilgi kümesini (PSVI) alır.

Açıklamalar

bir XDocumentdoğruladıktan sonra, belgedeki veya XElement XAttribute için şema sonrası doğrulama bilgi kümesi alabilirsiniz.

Nesneyi aldıktan IXmlSchemaInfo sonra, kısmi doğrulama türü (XmlSchemaElement veya ) almak için veya SchemaElement XmlSchemaAttributeözelliklerini kullanabilirsinizSchemaAttribute. Bir özniteliği veya alt ağacı doğrulamak için kısmi doğrulama türlerini kullanabilirsiniz.

GetSchemaInfo(XAttribute)

Doğrulanmış özniteliğin şema doğrulama sonrası bilgi kümesini (PSVI) alır.

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

Parametreler

source
XAttribute

XAttribute Daha önce doğrulanmış bir.

Döndürülenler

IXmlSchemaInfo

bir IXmlSchemaInfo için şema sonrası doğrulama bilgi kümesini içeren bir XAttribute.

Açıklamalar

Doğrulanmış bir özniteliğin IXmlSchemaInfo belirli özelliklerini belirlemek için bu yöntem tarafından döndürülen kullanabilirsiniz. Örneğin, özniteliğin bir XSD'deki varsayılan öznitelik değerinden gelip gelmediğini belirleyebilirsiniz.

Kısmi doğrulama türü (XmlSchemaAttribute) almak için özelliğini kullanırsınızSchemaAttribute. Belgenin tamamını doğrulamadan özniteliği yeniden doğrulamak için bunu kullanabilirsiniz.

Bu özelliğin bir örneği için bkz Validate. .

Şunlara uygulanır

GetSchemaInfo(XElement)

Doğrulanmış bir öğenin şema doğrulama sonrası bilgi kümesini (PSVI) alır.

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

Parametreler

source
XElement

XElement Daha önce doğrulanmış bir.

Döndürülenler

IXmlSchemaInfo

bir IXmlSchemaInfo için şema sonrası doğrulama bilgi kümesini (PSVI) içeren bir XElement.

Örnekler

Aşağıdaki örnek ağacı bir PSVI ile doldurur. Doğrulamadan sonra, ağaçtaki PSVI'ye göre geçersiz olan tüm öğeleri ve öznitelikleri yazdırır.

                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  

Bu örnek aşağıdaki çıkışı oluşturur:

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  

Açıklamalar

Doğrulanmış bir öğenin belirli özelliklerini belirlemek için bu yöntem tarafından döndürülen kullanabilirsiniz IXmlSchemaInfo . Örneğin, öğesinin dinamik şema türünü belirleyebilirsiniz.

Kısmi doğrulama türü (XmlSchemaElement) almak için özelliğini kullanırsınızSchemaElement. Bir alt ağacı, bir belgenin tamamını doğrulamadan kökünde bir öğeyle yeniden doğrulamak için kullanabilirsiniz.

Bu özelliğin bir örneği için bkz Validate. .

Şunlara uygulanır