Accesso alle informazioni sul tipo di schema

È possibile accedere alle informazioni sul tipo di schema utilizzando la proprietà SchemaType che restituisce un XmlSchemaType o un XmlSchemaDataType a seconda che il valore sia un tipo del linguaggio XSD (XML Schema Definition) incorporato o un tipo definito dall'utente, ad esempio, un simpleType o un complexType.

Controllo del tipo restituito

È possibile controllare il tipo restituito utilizzando la proprietà SchemaType nella classe XmlValidatingReader.

L'esempio di codice che segue controlla il tipo restituito.

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;

Per un esempio che utilizza la proprietà SchemaType, vedere la Proprietà XmlValidatingReader.SchemaType.

Convalida di schemi

Se si esegue una convalida di schemi XSD (XML Schema) o XDR (XML-Data Reduced), l'XmlSchemaType o l'XmlSchemaDataType corrisponde all'elemento corrente in lettura.

Se l'elemento o attributo corrente è un tipo semplice, verrà restituito un XmlSchemaDataType. Se l'elemento o attributo corrente è un tipo complesso definito dall'utente, verrà restituito un XmlSchemaType.

L'esempio di codice che segue determina se la proprietà SchemaType è un XmlSchemaComplexType. Il valore dell'oggetto viene controllato mediante il metodo ReadTypedValue e viene scritto nella 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);
                    }
                }
            }

Se si esegue una convalida DTD (document type definition), il XmlSchemaType o XmlSchemaDataType restituirà un riferimento null.

Quando viene chiamato il metodo Close, questa proprietà restituisce un riferimento null. Un riferimento null può essere restituito se il nodo corrente non ha alcun tipo di schema oppure se non è presente alcuno schema.

Utilizzo del metodo ReadTypedValue

Il metodo ReadTypedValue legge e restituisce un oggetto che corrisponde a un oggetto tipizzato .NET Framework per un determinato elemento dello schema XML. Se, ad esempio, il tipo è definito come xs:int, il tipo Int32 di .NET Framework verrà restituito per quell'oggetto.

L'operazione eseguita dipende dal tipo di nodo corrente e si basa sulle seguenti regole:

  • Se il nodo è un nodo dell'attributo, il visualizzatore resterà nella posizione corrente.
  • Se il nodo è un nodo dell'elemento, il visualizzatore sarà posizionato sul EndElement che legge CDATA, testo, spazio bianco, spazio bianco significativo e commenti.
  • Se il tipo non ha un mapping di direzione, ad esempio NMTOKENS, verrà restituito come una stringa.
  • Se si imposta la proprietà ValidationType su ValidationType.None, non verrà fornita alcuna informazione sul tipo di dati per schemi o DTD.

Dopo aver chiamato il metodo Close, il metodo ReadTypedValue restituirà un riferimento null.

L'esempio di codice che segue legge e restituisce l'oggetto tipizzato .NET Framework.

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

Tipi di convalida

Le informazioni sui tipi di dati possono essere individuate per i valori della proprietà ValidationType impostati su ValidationType.Schema o ValidationType.XDR. Non viene fornita alcuna informazione sul tipo di dati per ValidationType.DTD o ValidationType.None.

Nell'esempio di codice che segue, la prima riga imposta la proprietà ValidationType per trovare i tipi di dati XSD (XML Schema) e la seconda imposta la proprietà ValidationType per trovare i tipi di dati XDR.

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

Vedere anche

Convalida del linguaggio XML con schemi | Proprietà XmlValidatingReader.SchemaType | Metodo XmlValidatingReader.ReadTypedValue