Bagikan melalui


Extensions.GetSchemaInfo Metode

Definisi

Mendapatkan infoset validasi pasca-skema (PSVI) dari simpul yang divalidasi.

Overload

Nama Deskripsi
GetSchemaInfo(XAttribute)

Mendapatkan infoset validasi pasca-skema (PSVI) dari atribut yang divalidasi.

GetSchemaInfo(XElement)

Mendapatkan infoset validasi pasca-skema (PSVI) dari elemen yang divalidasi.

Keterangan

Setelah memvalidasi XDocument, Anda dapat mengambil infoset pasca-validasi skema untuk XElement atau XAttribute yang terkandung dalam dokumen.

Setelah mengambil IXmlSchemaInfo objek, Anda dapat menggunakan SchemaAttribute properti atau SchemaElement untuk mendapatkan jenis validasi parsial (XmlSchemaElement atau XmlSchemaAttribute). Anda dapat menggunakan jenis validasi parsial untuk memvalidasi atribut atau sub-pohon.

GetSchemaInfo(XAttribute)

Sumber:
XNodeValidator.cs
Sumber:
XNodeValidator.cs
Sumber:
XNodeValidator.cs
Sumber:
XNodeValidator.cs
Sumber:
XNodeValidator.cs

Mendapatkan infoset validasi pasca-skema (PSVI) dari atribut yang divalidasi.

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

Parameter

source
XAttribute

Yang XAttribute sebelumnya telah divalidasi.

Mengembalikan

IXmlSchemaInfo yang berisi infoset pasca-validasi skema untuk XAttribute.

Keterangan

Anda dapat menggunakan yang IXmlSchemaInfo dikembalikan oleh metode ini untuk menentukan karakteristik tertentu dari atribut yang divalidasi. Misalnya, Anda dapat menentukan apakah atribut berasal dari nilai atribut default dalam XSD.

Anda menggunakan SchemaAttribute properti untuk mendapatkan jenis validasi parsial (XmlSchemaAttribute). Anda dapat menggunakannya untuk memvalidasi ulang atribut tanpa memvalidasi seluruh dokumen.

Untuk contoh properti ini, lihat Validate.

Berlaku untuk

GetSchemaInfo(XElement)

Sumber:
XNodeValidator.cs
Sumber:
XNodeValidator.cs
Sumber:
XNodeValidator.cs
Sumber:
XNodeValidator.cs
Sumber:
XNodeValidator.cs

Mendapatkan infoset validasi pasca-skema (PSVI) dari elemen yang divalidasi.

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

Parameter

source
XElement

Yang XElement sebelumnya telah divalidasi.

Mengembalikan

IXmlSchemaInfo yang berisi infoset pasca-validasi skema (PSVI) untuk XElement.

Contoh

Contoh berikut mengisi pohon dengan PSVI. Setelah validasi, ia mencetak semua elemen dan atribut di pohon yang tidak valid sesuai dengan 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

Contoh ini menghasilkan output berikut:

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

Keterangan

Anda dapat menggunakan yang IXmlSchemaInfo dikembalikan oleh metode ini untuk menentukan karakteristik tertentu dari elemen yang divalidasi. Misalnya, Anda dapat menentukan jenis skema dinamis elemen.

Anda menggunakan SchemaElement properti untuk mendapatkan jenis validasi parsial (XmlSchemaElement). Anda dapat menggunakannya untuk memvalidasi ulang sub-pohon dengan elemen di akarnya tanpa memvalidasi seluruh dokumen.

Untuk contoh properti ini, lihat Validate.

Berlaku untuk