Partager via


Accès aux informations de type de schéma

Vous pouvez accéder aux informations de type de schéma à l'aide de la propriété SchemaType. La propriété SchemaType retourne XmlSchemaType ou XmlSchemaDataType selon que la valeur est un type de langage XSD intégré ou un type défini par l'utilisateur (par exemple, simpleType ou complexType).

Vérification du type de retour

Vous pouvez vérifier le type de retour à l'aide de la propriété SchemaType de la classe XmlValidatingReader.

L'exemple de code ci-dessous vérifie le type de retour.

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;

Pour obtenir un exemple d'utilisation de la propriété SchemaType, consultez XmlValidatingReader.SchemaType, propriété.

Validation de schémas

Si vous effectuez une validation de schéma XDR (XML-Data Reduced) ou XSD (XML Schema Definition), XmlSchemaType ou XmlSchemaDataType correspond à l'élément en cours de lecture.

Si l'élément ou l'attribut en cours est d'un type simple (simpleType), XmlSchemaDataType est retourné. Si l'élément ou l'attribut en cours est d'un type complexe (complexType) défini par l'utilisateur, XmlSchemaType est retourné.

L'exemple de code ci-dessous détermine si la propriété SchemaType est un type XmlSchemaComplexType. La valeur de l'objet est vérifiée à l'aide de la méthode ReadTypedValue, puis envoyée à la console.

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

Si vous effectuez une validation DTD (Document Type Definition), XmlSchemaType ou XmlSchemaDataType retourne une référence null.

Lorsque la méthode Close est appelée, cette propriété retourne à une référence null. Une référence null peut être retournée si le nœud en cours ne possède aucun type de schéma ou si aucun schéma n'est présent.

Utilisation de la méthode ReadTypedValue

La méthode ReadTypedValue lit et retourne un objet qui correspond à un objet typé .NET Framework pour un élément de schéma XML donné. Par exemple, si le type défini est xs:int, le type .NET Framework Int32 est retourné pour cet objet.

L'opération exécutée dépend du type du nœud en cours et repose sur les règles suivantes :

  • Si le nœud est un nœud d'attribut, le lecteur reste dans la position actuelle.
  • Si le nœud est un nœud d'élément, le lecteur est positionné sur EndElement et lit les sections CDATA, le texte, les espaces blancs, les espaces blancs significatifs et les commentaires.
  • Si le type ne possède pas de mappage de direction (par exemple, NMTOKENS), il est retourné sous forme de chaîne.
  • Si vous affectez la valeur ValidationType.None à la propriété ValidationType, aucune information de type de données n'est fournie pour les schémas ou les DTD.

Après l'appel à la méthode Close, la méthode ReadTypedValue retourne une référence null.

L'exemple de code ci-dessous lit et retourne l'objet typé .NET Framework.

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

Types de validation

Il est possible de trouver des informations de type de données pour les valeurs ValidationType.Schema ou ValidationType.XDR de la propriété ValidationType. Aucune information de type de données n'est fournie dans ValidationType.DTD ou ValidationType.None.

Dans l'exemple de code suivant, la première ligne définit la propriété ValidationType afin qu'elle recherche les types de données XSD. La deuxième ligne définit la propriété ValidationType pour qu'elle recherche les types de données XDR.

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

Voir aussi

Validation XML à l'aide de schémas | XmlValidatingReader.SchemaType, propriété | XmlValidatingReader.ReadTypedValue, méthode