Freigeben über


Zugriff auf Schematypinformationen

Mit Hilfe der SchemaType-Eigenschaft kann auf Schematypinformationen zugegriffen werden. Die SchemaType-Eigenschaft gibt entweder XmlSchemaType oder XmlSchemaDataType zurück. Dies hängt davon ab, ob es sich bei dem Wert um einen integrierten XSD (XML Schema definition language)-Typ oder um einen benutzerdefinierten Typ (z. B. simpleType oder complexType) handelt.

Überprüfen auf zurückgegebene Typen

Mit der SchemaType-Eigenschaft von XmlValidatingReader kann überprüft werden, ob der zurückgegebene Typ vorhanden ist.

Im folgenden Codebeispiel wird eine solche Überprüfung vorgenommen.

Dim obj As object = vreader.SchemaType
if (obj is XmlSchemaType)
    XmlSchemaType st = obj.BaseSchemaType
if (obj is XmlSchemaDataType)
    XmlSchemaDatatype vt = obj.ValueType
[C#]
object obj=vreader.SchemaType;
if (obj is XmlSchemaType)
    XmlSchemaType st = obj.BaseSchemaType;
if (obj is XmlSchemaDataType)
    XmlSchemaDatatype vt = obj.ValueType;

Ein weiteres Beispiel für die Verwendung der SchemaType-Eigenschaft finden Sie unter XmlValidatingReader.SchemaType-Eigenschaft.

Überprüfen von Schemas

Während der Durchführung einer XSD- oder XDR-Schemaüberprüfung entsprechen XmlSchemaType oder XmlSchemaDataType jeweils dem Element, das gerade gelesen wird.

Handelt es sich bei diesem Element oder Attribut um einen einfachen Typ, wird XmlSchemaDataType zurückgegeben. Im Fall benutzerdefinierter, komplexer Typen wird XmlSchemaType zurückgegeben.

Im folgenden Codebeispiel wird festgelegt, ob die SchemaType-Eigenschaft vom Typ XmlSchemaComplexType ist. Der Wert des Objekts wird unter Verwendung der ReadTypedValue-Methode überprüft und auf der Konsole ausgegeben.

while(vr.Read())

    if(vr.NodeType = XmlNodeType.Element)
    
      if (vr.SchemaType.ToString() = "System.Xml.Schema.XmlSchemaComplexType")
        Dim sct as XmlSchemaComplexType = CType(vr.SchemaType,XmlSchemaComplexType)
        Console.WriteLine("{0}({1})", vr.Name, sct.Name)
      else      
        Dim value as object = vr.ReadTypedValue()
        Console.WriteLine("{0}({1}):{2}", vr.Name, value.GetType().Name, value)    
      end if
    end if
  end while
[C#]
while (vr.Read())
            {
            if (vr.NodeType == XmlNodeType.Element)
                {
                if (vr.SchemaType is XmlSchemaComplexType)
                    {
                    XmlSchemaComplexType sct = (XmlSchemaComplexType)vr.SchemaType;
                    Console.WriteLine("{0}({1})", vr.Name, sct.Name);
                    }
                else
                    {
                    object value = vr.ReadTypedValue();
                    Console.WriteLine("{0}({1}):{2}", vr.Name, value.GetType().Name, value);
                    }
                }
            }

Bei der Durchführung einer DTD-Überprüfung wird durch XmlSchemaType oder XmlSchemaDataType ein NULL-Verweis zurückgegeben.

Beim Aufruf der Close-Methode kehrt diese Eigenschaft zu einem NULL-Verweis zurück. Ein NULL-Verweis kann zurückgegeben werden, wenn der aktuelle Knoten nicht über einen Schematyp verfügt oder kein Schema vorhanden ist.

Verwenden der ReadTypedValue-Methode

Mit der ReadTypedValue-Methode wird ein Objekt gelesen und zurückgegeben, das einem .NET Framework-typisierten Objekt eines gegebenen XML-Schemaelements entspricht. Ist der Typ beispielsweise als xs:int definiert, wird für dieses Objekt der .NET Framework-Typ Int32 zurückgegeben.

Welches Verfahren durchgeführt wird, hängt vom aktuellen Knotentyp ab und basiert auf folgenden Regeln:

  • Ist der Knoten ein Attributknoten, verbleibt der Reader in der aktuellen Position.
  • Ist der Knoten ein Elementknoten, wird der Reader auf EndElement gesetzt, wo er CDATA, Text, Leerraum, signifikanten Leerraum und Kommentare liest.
  • Verfügt der Typ über keine Richtungszuordnung (z. B. NMTOKENS), wird er als Zeichenfolge zurückgegeben.
  • Wird die ValidationType-Eigenschaft auf ValidationType.None gesetzt, wird kein Datentyp für Schemas oder DTDs bereitgestellt.

Nach Aufruf der Close-Methode gibt die ReadTypedValue-Methode einen NULL-Verweis zurück.

Im folgenden Codebeispiel wird das .NET Framework-typisierte Objekt gelesen und zurückgegeben.

Dim value as object = vr.ReadTypedValue()
[C#]
object value = vr.ReadTypedValue();

Überprüfungstypen

Datentypinformationen können bei ValidationType-Eigenschaftenwerten ermittelt werden, die auf ValidationType.Schema oder ValidationType.XDR gesetzt sind. Bei ValidationType.DTD oder ValidationType.None werden keine Datentypinformationen bereitgestellt.

Im folgenden Codebeispiel wird die ValidationType-Eigenschaft in der ersten Zeile zum Auffinden von XSD-Datentypen gesetzt. Hingegen wird in der zweiten Zeile die ValidationType-Eigenschaft zum Auffinden von XDR-Datentypen gesetzt.

vr.ValidationType = ValidationType.Schema
vr.ValidationType = ValidationType.XDR
[C#]
vr.ValidationType = ValidationType.Schema;
vr.ValidationType = ValidationType.XDR;

Siehe auch

Gültigkeitsprüfung von XML mit Schemas | XmlValidatingReader.SchemaType-Eigenschaft | XmlValidatingReader.ReadTypedValue-Methode