Compartir a través de


Acceso a información de tipo del esquema

Puede obtener acceso a la información de tipo del esquema mediante la propiedad SchemaType, que devuelve XmlSchemaType o XmlSchemaDataType en función de si el valor es un tipo del lenguaje XSD (XML Schema Definition, definición de esquemas XML) integrado o un tipo definido por el usuario (por ejemplo, simpleType o complexType).

Comprobar el tipo devuelto

Puede comprobar el tipo devuelto mediante la propiedad SchemaType de la clase XmlValidatingReader.

En el ejemplo siguiente se comprueba el tipo devuelto.

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;

Para consultar un ejemplo del uso de la propiedad SchemaType, vea la Propiedad XmlValidatingReader.SchemaType.

Validar esquemas

Si realiza la validación de XSD o de XDR, XmlSchemaType o XmlSchemaDataType corresponde al elemento que se está leyendo.

Si el elemento o el atributo actual es de un tipo simple, se devuelve XmlSchemaDataType. Si es de un tipo complejo definido por el usuario, se devuelve XmlSchemaType.

En el ejemplo de código siguiente se determina si la propiedad SchemaType es XmlSchemaComplexType. El valor del objeto se comprueba con el método ReadTypedValue y se escribe en la consola.

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 realiza una validación de DTD (Document Type Definition, definición de tipo de documento), XmlSchemaType o XmlSchemaDataType devuelven una referencia nula.

Cuando se llama al método Close, estas propiedades devuelven una referencia nula. También puede devolverse una referencia nula si el nodo actual no tiene tipo de esquema o si no hay ningún esquema.

Utilizar el método ReadTypedValue

Con el método ReadTypedValue se lee y se devuelve el objeto correspondiente a un objeto de un tipo de .NET Framework para un elemento de esquema XML determinado. Por ejemplo, si el tipo se define como xs:int, se devuelve el tipo de .NET Framework Int32 para ese objeto.

La operación realizada depende del tipo de nodo actual y se basa en las reglas siguientes:

  • Si el nodo es de atributo, el sistema de lectura permanece en la posición actual.
  • Si el nodo es de elemento, el sistema de lectura se sitúa en EndElement y lee CDATA, texto, espacios en blanco, espacios en blanco significativo y comentarios.
  • Si el tipo no tiene una asignación de dirección (por ejemplo NMTOKENS), se devuelve como cadena.
  • Si se establece el valor de la propiedad ValidationType como ValidationType.None, no se proporciona información de tipo de datos para esquemas o DTD.

Después de llamar al método Close, el método ReadTypedValue devuelve una referencia nula.

En el ejemplo de código siguiente se lee y se devuelve el objeto de tipo de .NET Framework.

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

Tipos de validación

La información acerca del tipo de datos se puede descubrir para los valores de la propiedad ValidationType establecidos como ValidationType.Schema o ValidationType.XDR. No se proporciona información de tipo de datos para ValidationType.DTD o ValidationType.None.

En la primera línea del ejemplo de código siguiente se establece el valor de la propiedad ValidationType de modo que se busquen los tipos de datos XSD. En la segunda línea se establece de modo que se busquen los tipos de datos XDR.

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

Vea también

Validación de XML con esquemas | XmlValidatingReader.SchemaType (Propiedad) | XmlValidatingReader.ReadTypedValue (Método)