Creazione di lettori XML

Le istanze di XmlReader vengono create utilizzando il metodo Create. La classe XmlReaderSettings consente di specificare il set di funzionalità da abilitare per l'oggetto XmlReader.

Nota importanteImportante

Sebbene in Microsoft .NET Framework siano incluse implementazioni complete della classe XmlReader, quali le classi XmlTextReader, XmlNodeReader e XmlValidatingReader, nella versione 2.0 di .NET Framework è consigliabile creare istanze di XmlReader utilizzando il metodo Create.

Le funzionalità vengono abilitate o disabilitate mediante le proprietà nella classe XmlReaderSettings. L'oggetto XmlReaderSettings viene quindi passato al metodo Create.

Tramite il metodo Create e la classe XmlReaderSettings si possono ottenere i seguenti vantaggi:

  • È possibile specificare le funzionalità da supportare nell'oggetto XmlReader creato.

  • È possibile riutilizzare la classe XmlReaderSettings per creare più oggetti lettore. In tal modo è possibile utilizzare le stesse impostazioni per creare più lettori con la stessa funzionalità. Oppure è possibile modificare l'oggetto XmlReaderSettings e creare un nuovo lettore con un set di funzionalità diverso.

  • È possibile aggiungere funzionalità a un lettore esistente. Il metodo Create può accettare un altro oggetto XmlReader. L'oggetto sottostante XmlReader può essere un lettore definito dall'utente o un oggetto XmlTextReader, oppure un'altra istanza di XmlReader a cui potranno essere aggiunte ulteriori funzionalità.

  • È possibile sfruttare al massimo tutte le nuove funzionalità aggiunte alla classe XmlReader nella versione 2.0 di .NET Framework. Alcune funzionalità, quali un miglior controllo della conformità e la conformità alla raccomandazione XML 1.0, sono disponibili solo per oggetti XmlReader creati mediante il metodo Create.

Nella tabella seguente sono elencate le impostazioni predefinite delle proprietà nella classe XmlReaderSettings.

Proprietà

Valore predefinito

CheckCharacters

true

ConformanceLevel

ConformanceLevel.Document

IgnoreComments

false

IgnoreProcessingInstructions

false

IgnoreWhitespace

false

LineNumberOffset

0.

LinePositionOffset

0

NameTable

null

DtdProcessing

Prohibit

ProhibitDtd

true. Questa proprietà è obsoleta. Utilizzare invece la proprietà DtdProcessing.

Schemas

Oggetto XmlSchemaSet vuoto.

ValidationFlags

ProcessIdentityConstraints abilitato

ValidationType

ValidationType.None

XmlResolver

Nuovo oggetto XmlUrlResolver.

Scenari di XmlReader

Nella tabella seguente sono descritti alcuni scenari comuni e le impostazioni da applicare nella classe XmlReaderSettings.

Scenario

XmlReaderSettings

Richiede che i dati siano un documento XML in formato corretto.

ConformanceLevel = ConformanceLevel.Document

Richiede che i dati siano un'entità analizzata XML in formato corretto.

ConformanceLevel = ConformanceLevel.Fragment

Richiede che i dati siano convalidati rispetto a una DTD.

DtdProcessing = DtdProcessing.Parse

ValidationType = ValidationType.DTD

Richiede che i dati siano convalidati rispetto a un XML Schema.

ValidationType = ValidationType.Schema

Schemas = XmlSchemaSet da utilizzare per la convalida

Richiede che i dati siano convalidati rispetto a un XML Schema inline.

ValidationType = ValidationType.Schema

ValidationFlags |= XmlSchemaValidationFlags.ProcessInlineSchema

Richiede il supporto del tipo.

ValidationType = ValidationType.Schema

Schemas = XmlSchemaSet da utilizzare

Sono disponibili alcuni scenari speciali che possono richiedere l'utilizzo di un'implementazione di XmlReader non creata dal metodo Create.

  • Se è necessario eseguire una convalida rispetto a uno schema XDR, utilizzare la classe XmlValidatingReader.
NotaNota

La classe XmlValidatingReader è obsoleta in .NET Framework versione 2.0.È consigliabile prendere in considerazione la possibilità di migrare a XML Schema ed eseguire la convalida utilizzando un oggetto XmlReader restituito dal metodo Create.

  • Per leggere i dati XML da un oggetto XmlNode, utilizzare la classe XmlNodeReader.

  • Se è necessario espandere entità su richiesta (i lettori creati dal metodo Create consentono di espandere tutte le entità) o se non si desidera normalizzare il contenuto di testo, utilizzare la classe XmlTextReader.

  • Se non si desidera che vengano restituiti attributi predefiniti, utilizzare la classe XmlTextReader.

Per creare un'istanza di oggetto XmlReader

Dim settings As New XmlReaderSettings()
settings.ConformanceLevel = ConformanceLevel.Fragment
settings.IgnoreWhitespace = true
settings.IgnoreComments = true
Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Fragment;
settings.IgnoreWhitespace = true;
settings.IgnoreComments = true;
XmlReader reader = XmlReader.Create("books.xml", settings);

Per includere un'istanza di lettore in un altro lettore

Dim txtReader As XmlTextReader = New XmlTextReader("bookOrder.xml")
Dim settings As New XmlReaderSettings()
settings.Schemas.Add("urn:po-schema", "PO.xsd")
settings.ValidationType = ValidationType.Schema
Dim reader As XmlReader = XmlReader.Create(txtReader, settings)
XmlTextReader txtReader = new XmlTextReader("bookOrder.xml");
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("urn:po-schema", "PO.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader reader = XmlReader.Create(txtReader, settings);

Per creare una catena di lettori e aggiungere ulteriori impostazioni

Dim settings As New XmlReaderSettings()
settings.ValidationType = ValidationType.DTD
Dim inner As XmlReader = XmlReader.Create("book.xml", settings) ' DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd")
settings.ValidationType = ValidationType.Schema
Dim outer As XmlReader = XmlReader.Create(inner, settings)  ' XML Schema Validation
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.DTD;
XmlReader inner = XmlReader.Create("book.xml", settings); // DTD Validation
settings.Schemas.Add("urn:book-schema", "book.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader outer = XmlReader.Create(inner, settings);  // XML Schema Validation

Vedere anche

Concetti

Lettura di XML con XmlReader