Nota |
|---|
| Nella versione Microsoft .NET Framework versione 2.0 è consigliabile creare istanze di XmlReader utilizzando il metodo System.Xml.XmlReader.Create. In questo modo è possibile sfruttare completamente le nuove funzionalità introdotte in questa versione. Per ulteriori informazioni, vedere Creazione di lettori XML. |
La classe XmlTextReader fornisce accesso in sola lettura di tipo forward-only a un flusso di dati XML. Il nodo corrente corrisponde al nodo sul quale è posizionato il visualizzatore. Il visualizzatore viene spostato in avanti utilizzando uno dei metodi di lettura disponibili, mentre le proprietà riflettono il valore del nodo corrente.
Questa classe implementa XmlReader ed è conforme alle Raccomandazioni W3C Extensible Markup Language (XML) 1.0 e Namespaces in XML. XmlTextReader fornisce le seguenti funzionalità:
-
Applica le regole di codice XML in formato corretto.
-
XmlTextReader non fornisce la convalida dei dati.
-
Verifica che il formato dei nodi DocumentType sia corretto. XmlTextReader verifica che il formato della DTD sia corretto, ma non effettua la convalida utilizzando la DTD.
-
Per i nodi in cui proprietà NodeType è XmlNodeType.EntityReference, verrà restituito un unico nodo vuoto EntityReference, ovvero il valore della proprietà Value è String.Empty.
Nota |
|---|
| Le dichiarazioni effettive delle entità della DTD sono chiamate nodi Entity. Quando si fa riferimento ai nodi nei dati, vengono chiamati nodi EntityReference. |
Poiché XmlTextReader non esegue i controlli aggiuntivi richiesti dalla convalida dei dati, rappresenta un analizzatore rapido per verificare la correttezza del formato.
Per eseguire la convalida dei dati, utilizzare un oggetto XmlReader di convalida. Per ulteriori informazioni, vedere Convalida di dati XML con XmlReader.
Per leggere i dati XML da un oggetto XmlDocument, utilizzare la classe XmlNodeReader.
La classe XmlTextReader genera un oggetto XmlException in caso di errori di analisi XML. Lo stato di un visualizzatore in seguito alla generazione di un errore non è prevedibile. Il tipo di nodo indicato può ad esempio essere diverso rispetto al tipo di nodo effettivo del nodo corrente. Utilizzare la proprietà ReadState per controllare se un visualizzatore si trova in stato di errore.
Per ulteriori informazioni sulle classi XmlReader, vedere Lettura di XML con XmlReader.
Considerazioni sulla protezione
Di seguito sono riportati alcuni elementi da tenere in considerazione quando si utilizza la classe XmlTextReader.
-
Le eccezioni generate dalla classe XmlTextReader possono rivelare informazioni sui percorsi che è preferibile non propagare all'applicazione. Le applicazioni devono intercettare le eccezioni ed elaborarle in modo appropriato.
-
L'elaborazione DTD è attivata per impostazione predefinita. Disattivare l'elaborazione DTD se si desidera evitare problemi di "Denial of Service" oppure se si utilizzano fonti non attendibili. Impostare la proprietà ProhibitDtd su true per disattivare l'elaborazione DTD.
Se è attivata l'elaborazione DTD, è possibile utilizzare il metodo XmlSecureResolver per limitare il numero delle risorse a cui la classe XmlTextReader può accedere. È anche possibile progettare l'applicazione in modo da specificare vincoli di memoria e di tempo per l'elaborazione XML. Configurare, ad esempio, limiti di timeout nell'applicazione ASP.NET.
-
I dati XML possono includere riferimenti a risorse esterne come file DTD. Per impostazione predefinita, le risorse esterne vengono risolte utilizzando un oggetto XmlUrlResolver senza credenziali utente. È possibile migliorare i livelli di protezione mediante una delle seguenti operazioni:
-
Limitando le risorse a cui la classe XmlTextReader può accedere impostando la proprietà XmlResolver su un oggetto XmlSecureResolver.
-
Non consentendo alla classe XmlReader di aprire risorse esterne impostando la proprietà XmlResolver su riferimento null (Nothing in Visual Basic).
-
I dati XML possono contenere un grande numero di attributi, dichiarazioni di spazi dei nomi, elementi nidificati e altri elementi la cui elaborazione richiede una notevole quantità di tempo. Per limitare le dimensioni dell'input inviato alla classe XmlTextReader, creare un'implementazione personalizzata di IStream e fornirla alla classe XmlTextReader.
-
Il metodo ReadValueChunk può essere utilizzato per gestire flussi di dati di grandi dimensioni. Questo metodo legge un numero limitato di caratteri alla volta invece di allocare una singola stringa per l'intero valore.
-
Per impostazione predefinita, le entità generali non vengono espanse. Tali entità vengono espanse quando si chiama il metodo ResolveEntity.
Note sull'ereditarietà:
Questa classe ha una richiesta di ereditarietà. Per ereditare da
XmlTextReader è necessario un livello di attendibilità totale. Per ulteriori informazioni, vedere
Pretese di ereditarietà.