Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe XmlReader

 

Data di pubblicazione: ottobre 2016

Rappresenta un lettore che fornisce accesso veloce, non in cache e di tipo forward-only ai dati XML.

Per esaminare il codice sorgente di .NET Framework per questo tipo, vedere il Reference Source.

Spazio dei nomi:   System.Xml
Assembly:  System.Xml (in System.Xml.dll)


public abstract class XmlReader : IDisposable

NomeDescrizione
System_CAPS_protmethodXmlReader()

Inizializza una nuova istanza della classe XmlReader.

NomeDescrizione
System_CAPS_pubpropertyAttributeCount

Quando ne viene eseguito l'override in una classe derivata, ottiene il numero di attributi sul nodo corrente.

System_CAPS_pubpropertyBaseURI

Quando ne viene eseguito l'override in una classe derivata, ottiene l'URI di base del nodo corrente.

System_CAPS_pubpropertyCanReadBinaryContent

Ottiene un valore che indica se XmlReader implementa metodi di lettura del contenuto binario.

System_CAPS_pubpropertyCanReadValueChunk

Ottiene un valore che indica se XmlReader implementa il metodo ReadValueChunk.

System_CAPS_pubpropertyCanResolveEntity

Ottiene un valore che indica se il lettore può analizzare e risolvere le entità.

System_CAPS_pubpropertyDepth

Quando ne viene eseguito l'override in una classe derivata, ottiene la profondità del nodo corrente nel documento XML.

System_CAPS_pubpropertyEOF

Quando ne viene eseguito l'override in una classe derivata, ottiene un valore che indica se il lettore è posizionato alla fine del flusso.

System_CAPS_pubpropertyHasAttributes

Ottiene un valore che indica se il nodo corrente dispone di attributi.

System_CAPS_pubpropertyHasValue

Quando ne viene eseguito l'override in una classe derivata, ottiene un valore che indica se il nodo corrente può avere Value.

System_CAPS_pubpropertyIsDefault

Quando ne viene eseguito l'override in una classe derivata, ottiene un valore che indica se il nodo corrente è un attributo generato dal valore predefinito configurato nella definizione DTD o nello schema.

System_CAPS_pubpropertyIsEmptyElement

Quando ne viene eseguito l'override in una classe derivata, ottiene un valore che indica se il nodo corrente è un elemento vuoto, ad esempio <MyElement/>.

System_CAPS_pubpropertyItem[Int32]

Quando ne viene eseguito l'override in una classe derivata, ottiene il valore dell'attributo con l'indice specificato.

System_CAPS_pubpropertyItem[String]

Quando ne viene eseguito l'override in una classe derivata, ottiene il valore dell'attributo con la proprietà Name specificata.

System_CAPS_pubpropertyItem[String, String]

Quando ne viene eseguito l'override in una classe derivata, ottiene il valore dell'attributo con le proprietà LocalName e NamespaceURI specificate.

System_CAPS_pubpropertyLocalName

Quando ne viene eseguito l'override in una classe derivata, ottiene il nome locale del nodo corrente.

System_CAPS_pubpropertyName

Quando ne viene eseguito l'override in una classe derivata, ottiene il nome completo del nodo corrente.

System_CAPS_pubpropertyNamespaceURI

Quando ne viene eseguito l'override in una classe derivata, ottiene l'URI dello spazio dei nomi, definito nella specifica W3C Namespace, del nodo su cui è posizionato il lettore.

System_CAPS_pubpropertyNameTable

Quando ne viene eseguito l'override in una classe derivata, ottiene l'oggetto XmlNameTable associato a questa implementazione.

System_CAPS_pubpropertyNodeType

Quando ne viene eseguito l'override in una classe derivata, ottiene il tipo del nodo corrente.

System_CAPS_pubpropertyPrefix

Quando ne viene eseguito l'override in una classe derivata, ottiene il prefisso dello spazio dei nomi associato al nodo corrente.

System_CAPS_pubpropertyQuoteChar

Quando ne viene eseguito l'override in una classe derivata, ottiene il carattere punto interrogativo (?) usato per delimitare il valore di un nodo attributo.

System_CAPS_pubpropertyReadState

Quando ne viene eseguito l'override in una classe derivata, ottiene lo stato del lettore.

System_CAPS_pubpropertySchemaInfo

Ottiene le informazioni sullo schema assegnate al nodo corrente in seguito alla convalida dello schema.

System_CAPS_pubpropertySettings

Ottiene l'oggetto XmlReaderSettings usato per creare questa istanza di XmlReader.

System_CAPS_pubpropertyValue

Quando ne viene eseguito l'override in una classe derivata, ottiene il valore del testo del nodo corrente.

System_CAPS_pubpropertyValueType

Ottiene il tipo CLR (Common Language Runtime) per il nodo corrente.

System_CAPS_pubpropertyXmlLang

Quando ne viene eseguito l'override in una classe derivata, ottiene l'ambito xml:lang corrente.

System_CAPS_pubpropertyXmlSpace

Quando ne viene eseguito l'override in una classe derivata, ottiene l'ambito xml:space corrente.

NomeDescrizione
System_CAPS_pubmethodClose()

Quando ne viene eseguito l'override in una classe derivata, sostituisce ReadState con Closed.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream)

Crea una nuova istanza di XmlReader con il flusso specificato e le impostazioni predefinite.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings)

Crea una nuova istanza di XmlReader con il flusso e le impostazioni specificati.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings, String)

Crea una nuova istanza di XmlReader con il flusso, l'URI di base e le impostazioni specificati.

System_CAPS_pubmethodSystem_CAPS_staticCreate(Stream, XmlReaderSettings, XmlParserContext)

Crea una nuova istanza di XmlReader con il flusso, le impostazioni e le informazioni di contesto specificati per l'analisi.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String)

Crea una nuova istanza di XmlReader con l'URI specificato.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String, XmlReaderSettings)

Crea una nuova istanza di XmlReader con l'URI e le impostazioni specificati.

System_CAPS_pubmethodSystem_CAPS_staticCreate(String, XmlReaderSettings, XmlParserContext)

Crea una nuova istanza di XmlReader con l'URI, le impostazioni e le informazioni di contesto specificati per l'analisi.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader)

Crea una nuova istanza di XmlReader con il lettore di testo specificato.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings)

Crea una nuova istanza di XmlReader con il lettore di testo e le impostazioni specificati.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings, String)

Crea una nuova istanza di XmlReader con il lettore di testo, le impostazioni e l'URI di base specificati.

System_CAPS_pubmethodSystem_CAPS_staticCreate(TextReader, XmlReaderSettings, XmlParserContext)

Crea una nuova istanza di XmlReader con il lettore di testo, le impostazioni e le informazioni di contesto specificati per l'analisi.

System_CAPS_pubmethodSystem_CAPS_staticCreate(XmlReader, XmlReaderSettings)

Crea una nuova istanza di XmlReader con il lettore XML e le impostazioni specificate.

System_CAPS_pubmethodDispose()

Rilascia tutte le risorse usate dall'istanza corrente della classe XmlReader.

System_CAPS_protmethodDispose(Boolean)

Rilascia le risorse non gestite usate da XmlReader e, facoltativamente, le risorse gestite.

System_CAPS_pubmethodEquals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object.)

System_CAPS_protmethodFinalize()

Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object.)

System_CAPS_pubmethodGetAttribute(Int32)

Quando ne viene eseguito l'override in una classe derivata, ottiene il valore dell'attributo con l'indice specificato.

System_CAPS_pubmethodGetAttribute(String)

Quando ne viene eseguito l'override in una classe derivata, ottiene il valore dell'attributo con la proprietà Name specificata.

System_CAPS_pubmethodGetAttribute(String, String)

Quando ne viene eseguito l'override in una classe derivata, ottiene il valore dell'attributo con le proprietà LocalName e NamespaceURI specificate.

System_CAPS_pubmethodGetHashCode()

Funge da funzione hash predefinita.(Ereditato da Object.)

System_CAPS_pubmethodGetType()

Ottiene l'oggetto Type dell'istanza corrente.(Ereditato da Object.)

System_CAPS_pubmethodGetValueAsync()

Ottiene in modo asincrono il valore del nodo corrente.

System_CAPS_pubmethodSystem_CAPS_staticIsName(String)

Restituisce un valore che indica se l'argomento della stringa è un nome XML valido.

System_CAPS_pubmethodSystem_CAPS_staticIsNameToken(String)

Restituisce un valore che indica se l'argomento della stringa è un token di un nome XML valido o meno.

System_CAPS_pubmethodIsStartElement()

Chiama MoveToContent e verifica se il nodo di contenuto corrente è un tag di inizio o un tag di elemento vuoto.

System_CAPS_pubmethodIsStartElement(String)

Chiama MoveToContent e verifica se il nodo corrente è un tag di inizio o un tag di elemento vuoto e se la proprietà Name dell'elemento trovato corrisponde all'argomento specificato.

System_CAPS_pubmethodIsStartElement(String, String)

Chiama MoveToContent e verifica se il nodo di contenuto è un tag di inizio o un tag di elemento vuoto e se le proprietà LocalName e NamespaceURI dell'elemento trovato corrispondono alle stringhe specificate.

System_CAPS_pubmethodLookupNamespace(String)

Quando ne viene eseguito l'override in una classe derivata, risolve il prefisso di uno spazio dei nomi nell'ambito dell'elemento corrente.

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.(Ereditato da Object.)

System_CAPS_pubmethodMoveToAttribute(Int32)

Quando ne viene eseguito l'override in una classe derivata, passa all'attributo con l'indice specificato.

System_CAPS_pubmethodMoveToAttribute(String)

Quando ne viene eseguito l'override in una classe derivata, passa all'attributo con la proprietà Name specificata.

System_CAPS_pubmethodMoveToAttribute(String, String)

Quando ne viene eseguito l'override in una classe derivata, passa all'attributo con le proprietà LocalName e NamespaceURI specificate.

System_CAPS_pubmethodMoveToContent()

Controlla se il nodo corrente è un nodo di contenuto (testo diverso da spazi vuoti, CDATA, Element, EndElement, EntityReference o EndEntity). Se il nodo non è un nodo di contenuto, il lettore passa al nodo di contenuto successivo oppure alla fine del file. Ignora i nodi del tipo seguente: ProcessingInstruction, DocumentType, Comment, Whitespace o SignificantWhitespace.

System_CAPS_pubmethodMoveToContentAsync()

Verifica in modo asincrono se il nodo corrente è un nodo di contenuto. Se il nodo non è un nodo di contenuto, il lettore passa al nodo di contenuto successivo oppure alla fine del file.

System_CAPS_pubmethodMoveToElement()

Quando ne viene eseguito l'override in una classe derivata, passa all'elemento che contiene il nodo attributo corrente.

System_CAPS_pubmethodMoveToFirstAttribute()

Quando ne viene eseguito l'override in una classe derivata, passa al primo attributo.

System_CAPS_pubmethodMoveToNextAttribute()

Quando ne viene eseguito l'override in una classe derivata, passa all'attributo successivo.

System_CAPS_pubmethodRead()

Quando ne viene eseguito l'override in una classe derivata, visualizza il nodo successivo nel flusso.

System_CAPS_pubmethodReadAsync()

Legge in modo asincrono il nodo successivo del flusso.

System_CAPS_pubmethodReadAttributeValue()

Quando ne viene eseguito l'override in una classe derivata, analizza il valore dell'attributo incluso in uno o più nodi Text, EntityReference o EndEntity.

System_CAPS_pubmethodReadContentAs(Type, IXmlNamespaceResolver)

Legge il contenuto come oggetto del tipo specificato.

System_CAPS_pubmethodReadContentAsAsync(Type, IXmlNamespaceResolver)

Legge in modo asincrono il contenuto come oggetto del tipo specificato.

System_CAPS_pubmethodReadContentAsBase64(Byte[], Int32, Int32)

Legge il contenuto e restituisce byte binari decodificati Base64.

System_CAPS_pubmethodReadContentAsBase64Async(Byte[], Int32, Int32)

Legge in modo asincrono il contenuto e restituisce byte binari con decodifica Base64.

System_CAPS_pubmethodReadContentAsBinHex(Byte[], Int32, Int32)

Legge il contenuto e restituisce i byte binari decodificati BinHex.

System_CAPS_pubmethodReadContentAsBinHexAsync(Byte[], Int32, Int32)

Legge in modo asincrono il contenuto e restituisce dati binari con decodifica BinHex.

System_CAPS_pubmethodReadContentAsBoolean()

Legge il contenuto di testo nella posizione corrente come Boolean.

System_CAPS_pubmethodReadContentAsDateTime()

Legge il contenuto di testo nella posizione corrente come oggetto DateTime.

System_CAPS_pubmethodReadContentAsDateTimeOffset()

Legge il contenuto di testo nella posizione corrente come oggetto DateTimeOffset.

System_CAPS_pubmethodReadContentAsDecimal()

Legge il contenuto di testo nella posizione corrente come oggetto Decimal.

System_CAPS_pubmethodReadContentAsDouble()

Legge il contenuto di testo nella posizione corrente come numero a virgola mobile e precisione doppia.

System_CAPS_pubmethodReadContentAsFloat()

Legge il contenuto di testo nella posizione corrente come numero a virgola mobile e precisione singola.

System_CAPS_pubmethodReadContentAsInt()

Legge il contenuto di testo nella posizione corrente come valore intero con segno a 32 bit.

System_CAPS_pubmethodReadContentAsLong()

Legge il contenuto di testo nella posizione corrente come valore intero con segno a 64 bit.

System_CAPS_pubmethodReadContentAsObject()

Legge il contenuto di testo nella posizione corrente come Object.

System_CAPS_pubmethodReadContentAsObjectAsync()

Legge in modo asincrono il contenuto di testo nella posizione corrente come oggetto Object.

System_CAPS_pubmethodReadContentAsString()

Legge il contenuto di testo nella posizione corrente come oggetto String.

System_CAPS_pubmethodReadContentAsStringAsync()

Legge in modo asincrono il contenuto di testo nella posizione corrente come oggetto String.

System_CAPS_pubmethodReadElementContentAs(Type, IXmlNamespaceResolver)

Legge il contenuto dell'elemento come il tipo richiesto.

System_CAPS_pubmethodReadElementContentAs(Type, IXmlNamespaceResolver, String, String)

Verifica che il nome locale e l'URI dello spazio dei nomi specificati corrispondano a quelli dell'elemento corrente, quindi legge il contenuto dell'elemento come il tipo richiesto.

System_CAPS_pubmethodReadElementContentAsAsync(Type, IXmlNamespaceResolver)

Legge in modo asincrono il contenuto dell'elemento come il tipo richiesto.

System_CAPS_pubmethodReadElementContentAsBase64(Byte[], Int32, Int32)

Legge l'elemento e decodifica il contenuto Base64.

System_CAPS_pubmethodReadElementContentAsBase64Async(Byte[], Int32, Int32)

Legge in modo asincrono l'elemento e decodifica il contenuto Base64.

System_CAPS_pubmethodReadElementContentAsBinHex(Byte[], Int32, Int32)

Legge l'elemento e decodifica il contenuto BinHex.

System_CAPS_pubmethodReadElementContentAsBinHexAsync(Byte[], Int32, Int32)

Legge in modo asincrono l'elemento e decodifica il contenuto BinHex.

System_CAPS_pubmethodReadElementContentAsBoolean()

Legge l'elemento corrente e restituisce il contenuto come oggetto Boolean.

System_CAPS_pubmethodReadElementContentAsBoolean(String, String)

Verifica che il nome locale e l'URI dello spazio dei nomi specificati corrispondano a quelli dell'elemento corrente, quindi legge l'elemento e restituisce il contenuto come oggetto Boolean.

System_CAPS_pubmethodReadElementContentAsDateTime()

Legge l'elemento corrente e restituisce il contenuto come oggetto DateTime.

System_CAPS_pubmethodReadElementContentAsDateTime(String, String)

Verifica che il nome locale e l'URI dello spazio dei nomi specificati corrispondano a quelli dell'elemento corrente, quindi legge l'elemento e restituisce il contenuto come oggetto DateTime.

System_CAPS_pubmethodReadElementContentAsDecimal()

Legge l'elemento corrente e restituisce il contenuto come oggetto Decimal.

System_CAPS_pubmethodReadElementContentAsDecimal(String, String)

Verifica che il nome locale e l'URI dello spazio dei nomi specificati corrispondano a quelli dell'elemento corrente, quindi legge l'elemento e restituisce il contenuto come oggetto Decimal.

System_CAPS_pubmethodReadElementContentAsDouble()

Legge l'elemento corrente e restituisce il contenuto come numero a virgola mobile e precisione doppia.

System_CAPS_pubmethodReadElementContentAsDouble(String, String)

Verifica che il nome locale e l'URI dello spazio dei nomi specificati corrispondano a quelli dell'elemento corrente, quindi legge l'elemento e restituisce il contenuto come numero a virgola mobile e precisione doppia.

System_CAPS_pubmethodReadElementContentAsFloat()

Legge l'elemento corrente e restituisce il contenuto come numero a virgola mobile e precisione singola.

System_CAPS_pubmethodReadElementContentAsFloat(String, String)

Verifica che il nome locale e l'URI dello spazio dei nomi specificati corrispondano a quelli dell'elemento corrente, quindi legge l'elemento e restituisce il contenuto come numero a virgola mobile e precisione singola.

System_CAPS_pubmethodReadElementContentAsInt()

Legge l'elemento corrente e restituisce il contenuto come valore intero con segno a 32 bit.

System_CAPS_pubmethodReadElementContentAsInt(String, String)

Verifica che il nome locale e l'URI dello spazio dei nomi specificati corrispondano a quelli dell'elemento corrente, quindi legge l'elemento e restituisce il contenuto come valore intero con segno a 32 bit.

System_CAPS_pubmethodReadElementContentAsLong()

Legge l'elemento corrente e restituisce il contenuto come valore intero con segno a 64 bit.

System_CAPS_pubmethodReadElementContentAsLong(String, String)

Verifica che il nome locale e l'URI dello spazio dei nomi specificati corrispondano a quelli dell'elemento corrente, quindi legge l'elemento e restituisce il contenuto come valore intero con segno a 64 bit.

System_CAPS_pubmethodReadElementContentAsObject()

Legge l'elemento corrente e restituisce il contenuto come Object.

System_CAPS_pubmethodReadElementContentAsObject(String, String)

Verifica che il nome locale e l'URI dello spazio dei nomi corrispondano a quelli dell'elemento corrente, quindi legge l'elemento corrente e restituisce il contenuto come Object.

System_CAPS_pubmethodReadElementContentAsObjectAsync()

Legge in modo asincrono l'elemento corrente e restituisce il contenuto come oggetto Object.

System_CAPS_pubmethodReadElementContentAsString()

Legge l'elemento corrente e restituisce il contenuto come oggetto String.

System_CAPS_pubmethodReadElementContentAsString(String, String)

Verifica che il nome locale e l'URI dello spazio dei nomi specificati corrispondano a quelli dell'elemento corrente, quindi legge l'elemento e restituisce il contenuto come oggetto String.

System_CAPS_pubmethodReadElementContentAsStringAsync()

Legge in modo asincrono l'elemento corrente e restituisce il contenuto come oggetto String.

System_CAPS_pubmethodReadElementString()

Legge un elemento di solo testo. È tuttavia consigliabile usare il metodo ReadElementContentAsString(), perché fornisce un modo più diretto per gestire questa operazione.

System_CAPS_pubmethodReadElementString(String)

Verifica che la proprietà Name dell'elemento trovato corrisponda alla stringa specificata prima di leggere un elemento di solo testo. È tuttavia consigliabile usare il metodo ReadElementContentAsString(), perché fornisce un modo più diretto per gestire questa operazione.

System_CAPS_pubmethodReadElementString(String, String)

Verifica che le proprietà LocalName e NamespaceURI dell'elemento corrispondano alle stringhe specificate prima di leggere un elemento di solo testo. È tuttavia consigliabile usare il metodo ReadElementContentAsString(String, String), perché fornisce un modo più diretto per gestire questa operazione.

System_CAPS_pubmethodReadEndElement()

Verifica che il nodo di contenuto corrente sia un tag di fine e sposta il lettore al nodo successivo.

System_CAPS_pubmethodReadInnerXml()

Quando ne viene eseguito l'override in una classe derivata, legge tutto il contenuto come stringa, incluso il markup.

System_CAPS_pubmethodReadInnerXmlAsync()

Legge in modo asincrono tutto il contenuto, incluso il markup, come stringa.

System_CAPS_pubmethodReadOuterXml()

Quando ne viene eseguito l'override in una classe derivata, legge il contenuto, incluso il markup, che rappresenta questo nodo e tutti i relativi nodi figlio.

System_CAPS_pubmethodReadOuterXmlAsync()

Legge in modo asincrono il contenuto, incluso il markup, che rappresenta il nodo e tutti i relativi nodi figlio.

System_CAPS_pubmethodReadStartElement()

Verifica se il nodo corrente è un elemento e sposta il lettore al nodo successivo.

System_CAPS_pubmethodReadStartElement(String)

Verifica che il nodo di contenuto corrente sia un elemento con la proprietà Name specificata e passa il lettore al nodo successivo.

System_CAPS_pubmethodReadStartElement(String, String)

Verifica che il nodo di contenuto corrente sia un elemento con le proprietà LocalName e NamespaceURI specificate e passa il lettore al nodo successivo.

System_CAPS_pubmethodReadString()

Quando ne viene eseguito l'override in una classe derivata, legge il contenuto di un nodo elemento o testo come se si trattasse di una stringa. È tuttavia consigliabile usare il metodo ReadElementContentAsString, perché fornisce un modo più diretto per gestire questa operazione.

System_CAPS_pubmethodReadSubtree()

Restituisce una nuova istanza di XmlReader che può essere usata per leggere il nodo corrente e tutti i relativi discendenti.

System_CAPS_pubmethodReadToDescendant(String)

Sposta l'oggetto XmlReader al successivo elemento discendente con il nome completo specificato.

System_CAPS_pubmethodReadToDescendant(String, String)

Sposta l'oggetto XmlReader al successivo elemento discendente con il nome locale e l'URI dello spazio dei nomi specificati.

System_CAPS_pubmethodReadToFollowing(String)

Legge fino a trovare un elemento con il nome completo specificato.

System_CAPS_pubmethodReadToFollowing(String, String)

Legge fino a trovare un elemento con il nome locale e l'URI dello spazio dei nomi specificati.

System_CAPS_pubmethodReadToNextSibling(String)

Sposta l'oggetto XmlReader al successivo elemento di pari livello con il nome completo specificato.

System_CAPS_pubmethodReadToNextSibling(String, String)

Sposta l'oggetto XmlReader al successivo elemento di pari livello con il nome locale e l'URI dello spazio dei nomi specificati.

System_CAPS_pubmethodReadValueChunk(Char[], Int32, Int32)

Legge flussi di testo di grandi dimensioni incorporati in un documento XML.

System_CAPS_pubmethodReadValueChunkAsync(Char[], Int32, Int32)

Legge in modo asincrono flussi di testo di grandi dimensioni incorporati in un documento XML.

System_CAPS_pubmethodResolveEntity()

Quando ne viene eseguito l'override in una classe derivata, risolve il riferimento a entità per i nodi EntityReference.

System_CAPS_pubmethodSkip()

Ignora gli elementi figlio del nodo corrente.

System_CAPS_pubmethodSkipAsync()

Ignora in modo asincrono gli elementi figlio del nodo corrente.

System_CAPS_pubmethodToString()

Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object.)

System_CAPS_noteNota

Per visualizzare il codice sorgente di .NET Framework per questo tipo, vedere il Reference Source. È possibile esplorare il codice sorgente online, scaricare i riferimenti per la visualizzazione offline e scorrere le origini (inclusi aggiornamenti e patch) durante l'esecuzione del debug. see instructions.

XmlReader fornisce l'accesso in sola lettura di tipo forward-only ai dati XML nel flusso o undocumento. Questa classe è conforme al W3C Extensible Markup Language (XML) 1.0 (fourth edition) e Namespaces in XML 1.0 (third edition) raccomandazioni.

XmlReaderi metodi consentono di spostarsi nei dati XML e leggere il contenuto di un nodo. Le proprietà della classe riflettono il valore del nodo corrente, ovvero in cui il lettore è posizionato. Il ReadState valore della proprietà indica lo stato corrente del lettore XML. Ad esempio, la proprietà è impostata su Initial per il XmlReader.Read (metodo) e Closed dal XmlReader.Close metodo. XmlReader fornisce inoltre controlli di conformità dei dati e la convalida rispetto a una DTD o schema.

XmlReaderutilizza un modello pull per recuperare i dati. Questo modello:

  • Semplifica la gestione dello stato da un perfezionamento naturale, dall'alto in basso procedura.

  • Supporta più flussi di input e i livelli.

  • Consente al client di fornire al parser un buffer in cui la stringa viene scritta direttamente e in questo modo si evita la necessità di una copia della stringa aggiuntiva.

  • Supporta l'elaborazione selettiva. Il client può ignorare alcuni elementi ed elaborare quelle che sono di particolare interesse per l'applicazione. È inoltre possibile impostare proprietà in anticipo per gestire la modalità di elaborazione nel flusso XML (ad esempio, la normalizzazione).

Contenuto della sezione:

Creazione di un lettore XML
Convalida dei dati XML
Conformità dei dati
Esplorazione dei nodi
Elementi XML di lettura
Attributi di lettura XML
Contenuto XML di lettura
Conversione a tipi CLR
Programmazione asincrona
Considerazioni sulla sicurezza

Utilizzare il Create metodo per creare un XmlReaderistanza.

Sebbene .NET Framework fornisce le implementazioni concrete della XmlReader classe, ad esempio il XmlTextReader, XmlNodeReader, e XmlValidatingReader classi, si consiglia di utilizzare le classi specializzate solo in questi scenari:

  • Quando si desidera readan sottoalbero DOM XML da un XmlNode dell'oggetto, utilizzare la XmlNodeReader classe. (Tuttavia, questa classe non supporta la convalida DTD o schema).

  • Se è necessario espandere entità su richiesta, non si desidera il testo contenuto normalizzato oppure non si desidera restituiti attributi predefiniti, utilizzare la XmlTextReader classe.

Per specificare il set di funzionalità che si desidera attivare il lettore XML, passare un System.Xml.XmlReaderSettings dell'oggetto per il Create metodo. È possibile utilizzare un singolo System.Xml.XmlReaderSettings dell'oggetto per creare più lettori con la stessa funzionalità o modificare il System.Xml.XmlReaderSettingsoggetto per creare un nuovo lettore con un set di funzionalità diverso. È possibile aggiungere facilmente funzionalità a un lettore esistente.

Se non si utilizza unSystem.Xml.XmlReaderSettingsdell'oggetto, vengono utilizzate le impostazioni predefinite. Vedere il Create pagina di riferimento per i dettagli.

XmlReader Genera un XmlException errori di analisi in XML. Dopo che viene generata un'eccezione, lo stato del lettore non è prevedibile. Ad esempio, il tipo di nodo restituito potrebbe essere diverso dal tipo di nodo effettivo del nodo corrente. Utilizzare la ReadState proprietà per controllare se il lettore è in stato di errore.

Per definire la struttura di un documento XML e il relativo elemento relazioni, i tipi di dati e i vincoli di contenuto, utilizzare una definizione di tipo documento (DTD) o schema di XML Schema definition language (XSD). Un documento XML viene considerato corretto se soddisfa i requisiti sintattici definiti dal W3C XML 1.0 Recommendation. Viene considerato valido se è corretto e anche conforme ai vincoli definiti dalla relativa DTD o nello schema. (Vedere la W3C XML Schema Part 1: Structures e W3C XML Schema Part 2: Datatypesraccomandazioni.) Pertanto, anche se tutti i documenti XML validi sono corretti, non tutti i documenti XML corretti sono validi.

È possibile convalidare i dati rispetto a una DTD, un Schema XSD inline o uno Schema XSD è archiviato in un XmlSchemaSet oggetto (cache); questi scenari sono descritti nel Create pagina di riferimento. XmlReader non supporta la convalida dello schema XML-Data Reduced (XDR).

Utilizzare le seguenti impostazioni nella XmlReaderSettings classe per specificare il tipo di convalida, se presente, ilXmlReader istanza supporta.

Utilizzare questo XmlReaderSettings membro

Per specificare

DtdProcessing proprietà

Se si desidera consentire l'elaborazione della DTD. Per impostazione predefinita l'elaborazione della DTD non è consentita.

Proprietà ValidationType

Se il lettore deve convalidare i dati e il tipo di convalida da eseguire (DTD o schema). Per impostazione predefinita non è prevista alcuna convalida dei dati.

ValidationEventHandler evento

Un gestore eventi per la ricezione di informazioni sugli eventi di convalida. Se non si fornisce un gestore eventi, viene generata un'eccezione XmlException per il primo errore di convalida.

Proprietà ValidationFlags

Opzioni di convalida aggiuntiva tramite il XmlSchemaValidationFlags membri dell'enumerazione:

  • AllowXmlAttributes-Consente gli attributi XML (xml:*) in documenti di istanza anche quando non vengono definite nello schema. Gli attributi vengono convalidati in base al tipo di dati. Vedere il XmlSchemaValidationFlags pagina di riferimento per l'impostazione da utilizzare in scenari specifici. (Disattivato per impostazione predefinita).

  • ProcessIdentityConstraints -Elabora i vincoli di identità (xs:ID, xs:IDREF, xs:key, xs:keyref, xs:unique) rilevati durante la convalida. (Abilitata per impostazione predefinita).

  • ProcessSchemaLocation -Consente di elaborare gli schemi specificati dal xsi:schemaLocation o xsi:noNamespaceSchemaLocation attributo. (Abilitata per impostazione predefinita).

  • ProcessInlineSchema-Consente di elaborare gli schemi XML inline durante la convalida. (Disattivato per impostazione predefinita).

  • ReportValidationWarnings-Consente di segnalare gli eventi se si verifica un avviso di convalida. Un avviso, in genere, viene emesso quando non si dispone di una DTD o di un XML Schema in base al quale convalidare un determinato elemento o attributo. L'evento ValidationEventHandler viene utilizzato per la notifica. (Disattivato per impostazione predefinita).

Schemas

Oggetto XmlSchemaSet da usare per la convalida.

Proprietà XmlResolver

Il XmlResolverper risolvere e accedere alle risorse esterne. Può includere le entità esterne, ad esempio DTD e gli schemi e qualsiasi xs:include o xs:import elementi contenuti nello Schema XML. Se non si specifica un XmlResolver, XmlReader viene utilizzato un predefinito XmlUrlResolver senza credenziali utente.

Lettori XML creati tramite il Create methodmeet i seguenti requisiti di conformità per impostazione predefinita:

  • Valore dell'attributo e le nuove righe vengono normalizzati in base di W3C XML 1.0 Recommendation.

  • Tutte le entità vengono espansi automaticamente.

  • Attributi predefiniti dichiarati nella definizione del tipo di documento vengono sempre aggiunti anche quando il lettore non vengono convalidate.

  • La dichiarazione di prefisso XML mappato all'URI dello spazio dei nomi XML corretto è consentita.

  • I nomi di notazione in un singolo NotationType dichiarazione dell'attributo eNmTokens in un singolo Enumeration attributo declarationare distinti.

Usare questi XmlReaderSettings le proprietà per specificare il tipo di conformità controlla si desidera abilitare:

Utilizzare questo XmlReaderSettings proprietà

A

Predefinito

Proprietà CheckCharacters

Abilitare o disabilitare i controlli per le operazioni seguenti:

  • Caratteri siano compresi nell'intervallo dei caratteri XML validi, come definito dal 2.2 Characters sezione della raccomandazione W3C XML 1.0.

  • Tutti i nomi XML vengono, come definito dal 2.3 Common Syntactic Constructs sezione della raccomandazione W3C XML 1.0.

Quando questa proprietà è impostata su true (predefinito), un XmlException eccezione viene generata se il file XML contiene caratteri non validi o i nomi XML non validi (ad esempio, un nome di elemento inizia con un numero).

Carattere e il controllo dei nomi è abilitato.

Se si imposta la proprietà CheckCharacters su false, il controllo dei caratteri per i riferimenti a entità carattere viene disattivato. Se il lettore elabora dati di testo, controlla sempre che i nomi XML vengono, indipendentemente da questa impostazione.

System_CAPS_noteNota

La raccomandazione XML 1.0 richiede la conformità a livello di documento in presenza di una DTD. Pertanto, se il lettore è configurato per supportare ConformanceLevel.Fragment, ma i dati XML contengono una definizione di tipo di documento (DTD), un XmlException viene generata un'eccezione.

Proprietà ConformanceLevel

Scegliere il livello di conformità per applicare:

Se i dati non conformi, un XmlException viene generata un'eccezione.

Document

Il nodo corrente è il nodo XML in cui è attualmente posizionato il lettore XML. Tutti XmlReadermetodi eseguono operazioni in relazione a questo nodo e tutti XmlReaderle proprietà riflettono il valore del nodo corrente.

I metodi seguenti semplificano la creazione di spostarsi tra i nodi e analizzare i dati.

Utilizzare questo XmlReaderSettings (metodo)

A

Read

Leggere il primo nodo e passare attraverso il nodo di un flusso in un momento. Tali chiamate vengono in genere eseguite all'interno di un while ciclo.

Utilizzare la NodeType proprietà per ottenere il tipo (ad esempio, attributo, commento, elemento e così via) del nodo corrente.

Skip

Ignorare gli elementi figlio del nodo corrente e passare al nodo successivo.

MoveToContent e MoveToContentAsync

Ignorare nodi non di contenuto e passare al nodo di contenuto successivo oppure alla fine del file.

I nodi non di contenuto includono ProcessingInstruction, DocumentType, Comment, Whitespace, e SignificantWhitespace.

Nodi di contenuto includono testo diverso da spazi vuoti, CDATA, EntityReference , eEndEntity.

ReadSubtree

Leggere un elemento e tutti gli elementi figlio e restituire un nuovo XmlReader istanza impostata su ReadState.Initial.

Questo metodo è utile per creare limiti attorno agli elementi XML; ad esempio, se si desidera passare dati a un altro componente per l'elaborazione e si desidera limitare la quantità di dati può accedere il componente.

Vedere il XmlReader.Read pagina di riferimento per un esempio di spostamento all'interno di un nodo di un flusso di testo in un momento e la visualizzazione del tipo di ogni nodo.

Nelle sezioni seguenti viene descritto come è possibile leggere determinati tipi di dati, ad esempio elementi, attributi e dati tipizzati.

Nella tabella seguente sono elencati i metodi e proprietà che la XmlReader classe fornisce per l'elaborazione di elementi. Dopo che il tipo XmlReader è stato posizionato in corrispondenza di un elemento, le proprietà del nodo, quale Name, riflettono i valori dell'elemento. Oltre ai membri descritti di seguito, è possibile utilizzare qualsiasi metodo e proprietà generale della classe XmlReader per elaborare gli elementi. Il metodo ReadInnerXml può essere utilizzato, ad esempio, per leggere il contenuto di un elemento.

System_CAPS_noteNota

Vedere la sezione 3.1 di W3C XML 1.0 Recommendation per le definizioni dei tag di inizio, fine, tag e tag di elemento vuoto.

Utilizzare questo XmlReader membro

A

Metodo IsStartElement

Controllare se il nodo corrente è un tag di inizio o di un tag di elemento vuoto.

Metodo ReadStartElement

Verificare che il nodo corrente è un elemento e far avanzare il reader al nodo successivo (chiamate IsStartElement seguito da Read).

Metodo ReadEndElement

Verificare che il nodo corrente è un tag di fine e far avanzare il reader al nodo successivo.

Metodo ReadElementString

Lettura di un elemento di solo testo.

Metodo ReadToDescendant

Spostare il lettore XML sul successivo elemento discendente (figlio) con il nome specificato.

Metodo ReadToNextSibling

Spostare il lettore XML sull'elemento successivo di pari livello con il nome specificato.

Proprietà IsEmptyElement

Controllare se l'elemento corrente dispone di un tag di fine dell'elemento. Ad esempio:

  • <item num="123"/> (IsEmptyElement è true).

  • <item num="123"> </item> (IsEmptyElement è false, anche se il contenuto dell'elemento è vuoto.)

Per un esempio di lettura del contenuto di testo di elementi, vedere il ReadString metodo. Nell'esempio seguente consente di elaborare elementi usando un while ciclo.

while (reader.Read()) {
  if (reader.IsStartElement()) {
    if (reader.IsEmptyElement)
      Console.WriteLine("<{0}/>", reader.Name);
    else {
      Console.Write("<{0}> ", reader.Name);
      reader.Read(); // Read the start tag.
      if (reader.IsStartElement())  // Handle nested elements.
        Console.Write("\r\n<{0}>", reader.Name);
      Console.WriteLine(reader.ReadString());  //Read the text content of the element.
    }
  } 
} 

Gli attributi XML si trovano in genere per gli elementi, ma anche delle autorizzazioni sui nodi di tipo di documento e dichiarazione XML.

Quando è posizionata su un nodo elemento, il MoveToAttribute metodo consente di scorrere l'elenco di attributi dell'elemento. Si noti che dopo MoveToAttribute è stato chiamato, le proprietà del nodo, ad esempio Name, NamespaceURI, e Prefix riflettono le proprietà di tale attributo, non le proprietà dell'elemento l'attributo appartiene.

La XmlReader classe fornisce i metodi e proprietà per leggere ed elaborare gli attributi di elementi.

Utilizzare questo XmlReader membro

A

Proprietà HasAttributes

Controllare se il nodo corrente dispone di attributi.

Proprietà AttributeCount

Ottenere il numero di attributi sull'elemento corrente.

Metodo MoveToFirstAttribute

Spostare il primo attributo in un elemento.

Metodo MoveToNextAttribute

Spostare all'attributo successivo in un elemento.

Metodo MoveToAttribute

Spostare un attributo specificato.

GetAttribute metodo o Item proprietà

Ottenere il valore di un attributo specificato.

Proprietà IsDefault

Controllare se il nodo corrente è un attributo generato dal valore predefinito definito nella DTD o schema.

Metodo MoveToElement

Spostare l'elemento che possiede l'attributo corrente. Utilizzare questo metodo per restituire un elemento dopo lo spostamento tra gli attributi.

Metodo ReadAttributeValue

Analizzare il valore dell'attributo in uno o più Text, EntityReference, o EndEntitynodi.

Per elaborare gli attributi è possibile utilizzare anche qualsiasi metodo e proprietà generale del tipo XmlReader. Dopo che il tipo XmlReader è stato posizionato in corrispondenza di un attributo, ad esempio, le proprietà Name e Value riflettono i valori dell'attributo. È inoltre possibile utilizzare qualsiasi metodo Read del contenuto per ottenere il valore dell'attributo.

Questo esempio viene utilizzata la AttributeCount proprietà per spostarsi tra tutti gli attributi su un elemento.

// Display all attributes.
if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  for (int i = 0; i < reader.AttributeCount; i++) {
    Console.WriteLine("  {0}", reader[i]);
  }
  // Move the reader back to the element node.
  reader.MoveToElement(); 
}

Questo esempio viene utilizzato il MoveToNextAttribute metodo in un while ciclo per spostarsi tra gli attributi.

if (reader.HasAttributes) {
  Console.WriteLine("Attributes of <" + reader.Name + ">");
  while (reader.MoveToNextAttribute()) {
    Console.WriteLine(" {0}={1}", reader.Name, reader.Value);
  }
  // Move the reader back to the element node.
  reader.MoveToElement();
}

Lettura di attributi su nodi della dichiarazione XML

Quando il lettore XML è posizionato su un nodo di dichiarazione XML, il Value proprietà restituisce la versione, autonoma e informazioni di codifica come un'unica stringa. XmlReader gli oggetti creati dal Create (metodo), il XmlTextReader (classe) e la XmlValidatingReaderclasse espongono la versione autonoma e gli elementi di codifica come attributi.

Lettura di attributi su nodi di tipo di documento

Quando viene posizionato il lettore XML su un nodo di tipo di documento, il GetAttribute (metodo) e Item proprietà può essere utilizzata per restituire i valori per i valori letterali SYSTEM e PUBLIC. Ad esempio, la chiamata al metodo reader.GetAttribute("PUBLIC") restituisce il valore PUBLIC.

Lettura di attributi per nodi dell'istruzione di elaborazione

Quando il tipo XmlReader è posizionato in corrispondenza di un nodo di istruzioni di elaborazione, la proprietà Value restituisce l'intero contenuto di testo. Gli elementi nel nodo istruzione di elaborazione non sono considerati come attributi. E non possono essere letti con la GetAttribute o MoveToAttribute (metodo).

La classe XMLReader include i membri seguenti che leggere il contenuto da un file XML e restituisce il contenuto come valori di stringa. (Per restituire i tipi CLR, vedere il nella sezione successiva.)

Utilizzare questo XmlReader membro

A

Proprietà Value

Ottenere il contenuto di testo del nodo corrente. Il valore restituito dipende dal tipo di nodo. vedere il Value pagina di riferimento per i dettagli.

Metodo ReadString

Ottenere il contenuto di un nodo elemento o testo come stringa. Questo metodo si interrompe in istruzioni di elaborazione e commenti.

Per informazioni dettagliate su come questo metodo gestisce i tipi di nodo specifico, vedere il ReadString pagina di riferimento.

Metodi ReadInnerXml e ReadInnerXmlAsync

Ottenere tutto il contenuto del nodo corrente, incluso il markup, ma esclusi i tag di inizio e fine. Ad esempio, per:

<node>this<child id="123"/></node>

ReadInnerXml Restituisce:

this<child id="123"/>

Metodi ReadOuterXml e ReadOuterXmlAsync

Ottenere tutto il contenuto del nodo corrente e relativi elementi figlio, inclusi i tag di inizio e fine e markup. Ad esempio, per:

<node>this<child id="123"/></node>

ReadOuterXml Restituisce:

<node>this<child id="123"/></node>

È possibile utilizzare i membri della XmlReader classe (elencate nella tabella riportata di seguito) per leggere dati XML e i valori come common language runtime (CLR) tipi restituiti anziché stringhe. Questi membri consentono di ottenere i valori nella rappresentazione quello più adatto per l'attività di codifica senza dover analizzare o convertire i valori stringa manualmente.

  • Il ReadElementContentAs metodi possono essere chiamati solo su tipi di nodi elemento. e non possono essere utilizzati su elementi contenenti elementi figlio o contenuto misto. Quando viene chiamato, l'oggetto XmlReader legge il tag di inizio e il contenuto dell'elemento, quindi si sposta dopo il tag di fine dell'elemento. Le istruzioni di elaborazione e i commenti vengono ignorati e le entità vengono espanse.

  • Il ReadContentAsmetodi leggere il contenuto di testo nella posizione corrente del lettore e se i dati XML non dispone di alcuno schema o dati digitare le informazioni associate, convertire il contenuto di testo per il tipo restituito richiesto. Il testo, gli spazi vuoti, gli spazi vuoti significativi e le sezioni CDATA sono concatenati. I commenti e istruzioni di elaborazione vengono ignorate e i riferimenti alle entità vengono risolti automaticamente.

La XmlReader classe utilizza le regole definite per il W3C XML Schema Part 2: Datatypesraccomandazione.

Utilizzare questo XmlReader(metodo)

Per restituire il tipo CLR

ReadContentAsBoolean e ReadElementContentAsBoolean

Boolean

ReadContentAsDateTime e ReadElementContentAsDateTime

DateTime

ReadContentAsDouble e ReadElementContentAsDouble

Double

ReadContentAsLong e ReadElementContentAsLong

Int64

ReadContentAsInt e ReadElementContentAsInt

Int32

ReadContentAsString e ReadElementContentAsString

String

ReadContentAs e ReadElementContentAs

Il tipo specificato con il returnType parametro

ReadContentAsObject e ReadElementContentAsObject

Il tipo più appropriato, come specificato dalla XmlReader.ValueType proprietà. Vedere Supporto di tipi di dati nelle classi System.Xml per le informazioni di mapping.

Se un elemento non può essere facilmente convertito in un tipo CLR a causa di un formato, è possibile utilizzare un mapping dello schema per garantire una corretta conversione. Nell'esempio seguente viene utilizzato un file XSD per convertire il hire-date elemento per il xs:date tipo e quindi viene utilizzato il ReadElementContentAsDateTime per restituire l'elemento come un DateTime oggetto.

Input (XML):

<employee xmlns="urn:empl-hire">
    <ID>12365</ID>
    <hire-date>2003-01-08</hire-date>
    <title>Accountant</title>
</employee>

Schema (HireDate. xsd):

<?xml version="1.0"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:empl-hire" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="ID" type="xs:unsignedShort" />
        <xs:element name="hire-date" type="xs:date" />
        <xs:element name="title" type="xs:string" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Codice:

// Create a validating XmlReader object. The schema 
// provides the necessary type information.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ValidationType = ValidationType.Schema;
settings.Schemas.Add("urn:empl-hire", "hireDate.xsd");
using (XmlReader reader = XmlReader.Create("hireDate.xml", settings)) {

  // Move to the hire-date element.
  reader.MoveToContent();
  reader.ReadToDescendant("hire-date");

  // Return the hire-date as a DateTime object.
  DateTime hireDate = reader.ReadElementContentAsDateTime();
  Console.WriteLine("Six Month Review Date: {0}", hireDate.AddMonths(6));
}

Output:

Six Month Review Date:  7/8/2003 12:00:00 AM

La maggior parte del XmlReader metodi dispongono di controparti asincrone con "Async" alla fine dei relativi nomi di metodo. Ad esempio, l'equivalente asincrono di ReadContentAsObject è ReadContentAsObjectAsync.

Con chiamate al metodo asincrono, è possono utilizzare i metodi seguenti:

Nelle sezioni seguenti descrivono l'utilizzo asincrono per i metodi che non dispongono di controparti asincrone.

ReadStartElement, metodo

public static async Task ReadStartElementAsync(this XmlReader reader, string localname, string ns)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.Element)
    {
        throw new InvalidOperationException(reader.NodeType.ToString() + " is an invalid XmlNodeType");
    }
    if ((reader.LocalName == localname) && (reader.NamespaceURI == ns))
    {
        await reader.ReadAsync();
    }
    else
    {
        throw new InvalidOperationException("localName or namespace doesn’t match");
    }
}

Metodo ReadEndElement

public static async Task ReadEndElementAsync(this XmlReader reader)
{
    if (await reader.MoveToContentAsync() != XmlNodeType.EndElement)
    {
        throw new InvalidOperationException();
    }
    await reader.ReadAsync();
}

Metodo ReadToNextSibling

public static async Task<bool> ReadToNextSiblingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the next sibling
    XmlNodeType nt;
    do
    {
        await reader.SkipAsync();
        if (reader.ReadState != ReadState.Interactive)
            break;
        nt = reader.NodeType;
        if (nt == XmlNodeType.Element &&
             ((object)localName == (object)reader.LocalName) &&
             ((object)namespaceURI ==(object)reader.NamespaceURI))
        {
            return true;
        }
    } while (nt != XmlNodeType.EndElement && !reader.EOF);

    return false;
}

Metodo ReadToFollowing

public static async Task<bool> ReadToFollowingAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find element with that name
    while (await reader.ReadAsync())
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}

Metodo ReadToDescendant

public static async Task<bool> ReadToDescendantAsync(this XmlReader reader, string localName, string namespaceURI)
{
    if (localName == null || localName.Length == 0)
    {
        throw new ArgumentException("localName is empty or null");
    }
    if (namespaceURI == null)
    {
        throw new ArgumentNullException("namespaceURI");
    }
    // save the element or root depth
    int parentDepth = reader.Depth;
    if (reader.NodeType != XmlNodeType.Element)
    {
        // adjust the depth if we are on root node
        if (reader.ReadState == ReadState.Initial)
        {
            parentDepth--;
        }
        else
        {
            return false;
        }
    }
    else if (reader.IsEmptyElement)
    {
        return false;
    }

    // atomize local name and namespace
    localName = reader.NameTable.Add(localName);
    namespaceURI = reader.NameTable.Add(namespaceURI);

    // find the descendant
    while (await reader.ReadAsync() && reader.Depth > parentDepth)
    {
        if (reader.NodeType == XmlNodeType.Element && ((object)localName == (object)reader.LocalName) && ((object)namespaceURI == (object)reader.NamespaceURI))
        {
            return true;
        }
    }
    return false;
}

Tenere presente quanto segue quando si lavora con la XmlReader classe:

  • Le eccezioni generate dal XmlReader possono rivelare informazioni sui percorsi che si preferisca non propagato app. L'app debba intercettare le eccezioni ed elaborarle in modo adeguato.

  • Non abilitare l'elaborazione della DTD se si teme di tipo denial of problemi del servizio o se si gestiscono origini non attendibili. L'elaborazione della DTD è disabilitata per impostazione predefinita per XmlReader gli oggetti creati dal Create metodo.

    Se l'elaborazione della DTD è attivata, è possibile utilizzare il tipo XmlSecureResolver per limitare le risorse a cui il tipo XmlReader può accedere. È inoltre possibile progettare l'app in modo che l'elaborazione XML è disponibile memoria e tempo limitato. Ad esempio, è possibile configurare i limiti di timeout nell'applicazione ASP.NET.

  • È possibile che i dati XML includano riferimenti a risorse esterne quali, ad esempio, un file dello schema. Per impostazione predefinita, le risorse esterne vengono risolte utilizzando un XmlUrlResolver oggetto senza credenziali utente. È possibile migliorare i livelli di sicurezza mediante una delle seguenti operazioni:

  • Il ProcessInlineSchema e ProcessSchemaLocation flag di convalida di un XmlReaderSettings oggetto non impostato per impostazione predefinita. Ciò consente di proteggere il tipo XmlReader da attacchi basati sullo schema durante l'elaborazione dei dati XML da un'origine non attendibile. Se questi flag sono impostati, verrà utilizzata la proprietà XmlResolver dell'oggetto XmlReaderSettings per risolvere i percorsi dello schema rilevati nel documento di istanza nel tipo XmlReader. Se il XmlResolver è impostata su null, le posizioni degli schemi non sono risolte anche se il ProcessInlineSchema e ProcessSchemaLocation sono impostati i flag di convalida.

    Gli schemi aggiunti durante la convalida aggiungono nuovi tipi e possono alterare l'esito della convalida del documento in esame. Di conseguenza, gli schemi esterni devono essere risolti solo da origini attendibili.

    Si consiglia di disabilitare il ProcessIdentityConstraints flag durante la convalida di documenti XML non attendibili di grandi dimensioni in scenari a elevata disponibilità rispetto a uno schema con vincoli di identità su una vasta parte del documento. Questo flag è abilitato per impostazione predefinita.

  • 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 che viene inviato per la XmlReader, è possibile:

    • Limitare le dimensioni del documento impostando il MaxCharactersInDocument proprietà.

    • Limitare il numero di caratteri risultanti dall'espansione delle entità impostando la MaxCharactersFromEntities proprietà.

    • Creare un oggetto personalizzato IStream implementazione per il XmlReader.

  • Il ReadValueChunk metodo può essere utilizzato 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.

  • Durante la lettura di un documento XML con un numero elevato di nomi univoci locali, spazi dei nomi o prefissi, può verificarsi un problema. Se si utilizza una classe che deriva da XmlReader, e si chiama il LocalName, Prefix, o NamespaceURI proprietà per ogni elemento, la stringa restituita viene aggiunta a un NameTable. La raccolta contenuta la NameTable non diminuiscono mai dimensioni, la creazione di una perdita di memoria virtuale degli handle di stringa. Una possibile soluzione per questo consiste nel derivare dalla NameTable classe e stabilendo una dimensione massima. (Non è possibile impedire l'utilizzo di un NameTable, o per passare il NameTable quando è pieno). Un'altra possibile soluzione consiste nell'evitare di utilizzare le proprietà citate e impiegare invece il MoveToAttribute metodo con il IsStartElement (metodo) quando possibile; questi metodi non restituiscono stringhe e provocano quindi problemi di superamento della capacità di NameTable insieme.

  • Gli oggetti XmlReaderSettings possono contenere informazioni sensibili quali le credenziali utente. L'oggetto XmlReaderSettings e le relative credenziali utente potrebbero essere utilizzate da un componente non attendibile per creare oggetti XmlReader che consentano di leggere i dati. Prestare attenzione quando la memorizzazione nella cache XmlReaderSettings oggetti, o quando si passa il XmlReaderSettings oggetto da un componente a altro.

  • Non accettare componenti di supporto, ad esempio oggetti NameTable, XmlNamespaceManager e XmlResolver da un'origine non attendibile.

Esempio di codice seguente viene illustrato come utilizzare l'analisi APIto asincrona XML.

async Task TestReader(System.IO.Stream stream)
{
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.Async = true;

    using (XmlReader reader = XmlReader.Create(stream, settings))
    {
        while (await reader.ReadAsync())
        {
            switch (reader.NodeType)
            {
                case XmlNodeType.Element:
                    Console.WriteLine("Start Element {0}", reader.Name);
                    break;
                case XmlNodeType.Text:
                    Console.WriteLine("Text Node: {0}",
                             await reader.GetValueAsync());
                    break;
                case XmlNodeType.EndElement:
                    Console.WriteLine("End Element {0}", reader.Name);
                    break;
                default:
                    Console.WriteLine("Other node {0} with value {1}",
                                    reader.NodeType, reader.Value);
                    break;
            }
        }
    }
}

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1

I membri statici pubblici ( Condiviso in Visual Basic) di questo tipo è thread safe. Non tutti i membri di istanza sono garantiti come thread safe.

Torna all'inizio
Mostra: