Condividi tramite


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 vuoto EntityReference , 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:

  • 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.