Lettura degli attributi con XmlReader

Sono consentiti gli attributi su tre tipi di nodi:

  • Element
  • XmlDeclaration
  • Dichiarazione DocumentType

Per un elemento, il movimento attraverso gli attributi è diverso dalla lettura dei valori degli attributi su una dichiarazione XmlDeclaration o DocumentType.

Lettura degli attributi sugli elementi

Quando vengono posizionati sul nodo di un elemento, i metodi MoveToAttribute consentono di esplorare l'elenco di attributi dell'elemento. Dopo aver richiamato MoveToAttribute, le proprietà del nodo come Name, NamespaceURI, Prefix e così via, rispecchiano le proprietà di quell'attributo e non l'elemento contenuto.

Non è necessario specificare sempre un attributo su un elemento. È possibile che un valore predefinito per gli attributi degli elementi sia definito da un DTD o da uno schema. Se ad esempio <!ATTLIST e a CDATA "123"> si trova nel DTD, all'attributo "a" dell'elemento "e" verrà assegnato il valore "123" se l'attributo "a" sull'elemento "e" non è definito nel documento XML. Quando si utilizzano dei metodi che si spostano tra gli attributi, gli attributi che ricevono il valore da un DTD o da uno schema vengono trattati proprio come gli attributi ai quali viene assegnato un valore nel flusso XML. A livello di programmazione è disponibile un modo per determinare come l'attributo ha ricevuto il suo valore, utilizzando cioé la proprietà IsDefault. La proprietà IsDefault restituisce il valore True se il nodo corrente è un attributo e l'attributo non è stato specificato nel flusso XML, ma deriva dalla dichiarazione degli attributi predefiniti nel DTD.

Nota   A seconda del tipo di reader usato, questa proprietà non è sempre applicabile.

Nella tabella seguente sono indicati i valori che può restituire la proprietà IsDefault.

Implementazione XmlReader Valori restituiti
XmlTextReader False in quanto non sono presenti informazioni DTD.
XmlValidatingReader True indica che il nodo corrente è un attributo il cui valore è stato generato sulla base del valore predefinito impostato nel DTD o nello schema. False indica che il valore dell'attributo è stato specificato in modo esplicito nel flusso XML.
XmlNodeReader True se il DTD è definito in XmlDocument, altrimenti False.
XsltReader False in quanto non è stata esposta alcuna informazione DTD (nodi DOCTYPE) nel modello di dati XPath.

Quando viene posizionato su un attributo, il metodo GetAttribute viene utilizzato per recuperare il valore dell'attributo.

Attributi su altri tipi di nodo

Gli attributi vengono esposti da XmlTextReader e XmlValidatingReader solo sui nodi Element, XmlDeclaration e DocumentType. Quando si implementano le classi XmlReader per il tipo di nodo XmlDeclaration, le proprietà Version, Standalone ed Encoding vengono restituite sotto forma di stringa nella proprietà Value di XmlDeclaration. La proprietà Value non può essere restituita come string.Empty. Se è vuota, la classe DOM XmlDocument e altre classi che potrebbero dipendere da queste informazioni non possono essere caricate da XmlReader.

Vedere anche

Lettura dell'XML con XmlReader | Posizione corrente dei nodi in XmlReader | Impostazioni delle proprietà su XmlReader | Confronto di oggetti utilizzando XmlNameTable con XmlReader | Lettura del contenuto di elementi e attributi | Omissione del contenuto con XmlReader | Lettura ed espansione con EntityReference | Confronto di XmlReader con il lettore SAX | Lettura dei dati XML con XmlTextReader | Lettura delle strutture dei nodi con XmlNodeReader | Convalida dell'XML con XmlValidatingReader | Creazione di un reader XML personalizzato | Classe XmlReader | Membri XmlReader | Classe XmlNodeReader | Membri XmlNodeReader | Classe XmlTextReader | Membri XmlTextReader | Classe XmlValidatingReader | Membri XmlValidatingReader