Classe System.Xml.XmlTextReader
Questo articolo fornisce osservazioni supplementari alla documentazione di riferimento per questa API.
Nota
È consigliabile creare XmlReader istanze usando il XmlReader.Create metodo per sfruttare le nuove funzionalità.
XmlTextReader fornisce l'accesso forward-only in sola lettura a un flusso di dati XML. Il nodo corrente corrisponde al nodo sul quale è posizionato il lettore. Il lettore è avanzato usando uno dei metodi di lettura e delle proprietà che riflettono il valore del nodo corrente.
Questa classe implementa XmlReader e è conforme alle raccomandazioni W3C Extensible Markup Language (XML) 1.0 e spazi dei nomi nei consigli XML. XmlTextReader
offre le funzionalità seguenti:
Applica le regole di XML ben formato.
XmlTextReader
non fornisce la convalida dei dati.Verifica che
DocumentType
i nodi siano ben formati.XmlTextReader
controlla il DTD per verificare la correttezza del formato, ma non convalida l'uso del DTD.Per i nodi in cui NodeType è
XmlNodeType.EntityReference
, viene restituito un singolo nodo vuotoEntityReference
, ovvero la Value proprietà èString.Empty
.
Nota
Le dichiarazioni effettive delle entità nel DTD sono denominate Entity
nodi. Quando si fa riferimento a questi nodi nei dati, vengono chiamati EntityReference
nodi.
- Non espande gli attributi predefiniti.
XmlTextReader
Poiché non esegue i controlli aggiuntivi necessari per la convalida dei dati, fornisce un parser di ben formato rapido.
Per eseguire la convalida dei dati, usare una convalida di XmlReader.
Per leggere i dati XML da un oggetto XmlDocument, usare XmlNodeReader.
XmlTextReader
genera un oggetto XmlException sugli errori di analisi XML. Dopo che viene generata un'eccezione, lo stato del lettore non è prevedibile. Ad esempio, il tipo di nodo segnalato può essere diverso dal tipo di nodo effettivo del nodo corrente. Utilizzare la ReadState proprietà per verificare se un lettore è in stato di errore.
Considerazioni sulla sicurezza
Di seguito sono riportati alcuni aspetti da considerare quando si usa la XmlTextReader classe .
Le eccezioni generate da XmlTextReader possono divulgare le informazioni sul percorso che non si desidera visualizzare nell'applicazione. Le applicazioni devono intercettare le eccezioni ed elaborarle in modo adeguato.
Per impostazione predefinita, l'elaborazione della DTD è attivata. Disabilitare l'elaborazione DTD se si è interessati ai problemi Denial of Service o se si gestiscono origini non attendibili. Impostare la proprietà su Prohibit per disabilitare l'elaborazione DtdProcessing DTD.
Se l'elaborazione della DTD è attivata, è possibile utilizzare il tipo XmlSecureResolver per limitare le risorse a cui il tipo XmlTextReader può accedere. È anche possibile progettare l'applicazione in modo da specificare vincoli di memoria e di tempo per l'elaborazione XML. Ad esempio, configurare i limiti di timeout nell'applicazione ASP.NET.
I dati XML possono includere riferimenti a risorse esterne, ad esempio un file DTD. Per impostazione predefinita, le risorse esterne vengono risolte utilizzando un oggetto XmlUrlResolver senza credenziali utente. È possibile migliorare i livelli di sicurezza mediante una delle seguenti operazioni:
Limitando le risorse a cui la classe XmlTextReader può accedere impostando la proprietà XmlResolver su un oggetto XmlSecureResolver.
Non consentire al tipo XmlReader di aprire alcuna risorsa esterna impostando la proprietà XmlResolver su
null
.
I dati XML possono contenere un numero elevato di attributi, dichiarazione dello spazio dei nomi, elementi annidati e così via, la cui elaborazione richiede una notevole quantità di tempo. Per limitare le dimensioni dell'input inviato a XmlTextReader, creare un'implementazione IStream personalizzata e specificarla .XmlTextReader
Il ReadValueChunk metodo può essere usato per gestire flussi di dati di grandi dimensioni. Questo metodo consente di leggere un numero ridotto 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 ResolveEntity metodo.