Compartir a través de


Leer atributos con XmlReader

Los atributos se permiten en tres tipos de nodo:

  • Element
  • XmlDeclaration
  • Declaración DocumentType

Para un elemento, el movimiento a través de sus atributos difiere de la lectura de los valores de los atributos en una declaración XmlDeclaration o DocumentType.

Leer atributos de elementos

Al colocarse en un nodo de tipo element, los métodos MoveToAttribute permiten avanzar por la lista de atributos del elemento. Después de llamar al método MoveToAttribute, las propiedades del nodo, como Name, NamespaceURI, Prefix, etcétera, reflejan las propiedades de ese atributo y no el elemento que lo contiene.

Un atributo no siempre se debe especificar en un elemento. Las DTD o los esquemas pueden definir un valor predeterminado para los atributos de elementos. Por ejemplo, si <!ATTLIST e a CDATA "123"> se encuentra en la DTD, al atributo "a" del elemento "e" se le asigna el valor "123" si el atributo "a" del elemento "e" no se define en el documento XML. Al usar métodos que se mueven entre los atributos, en los atributos que reciben su valor de una DTD o un esquema se actúa igual que en los atributos a los que se asigna valor en la secuencia XML. Para determinar la forma en que el atributo recibe su valor, se puede emplear programación: la propiedad IsDefault. Esta propiedad devuelve true si el nodo actual es un atributo que no se especificó en la secuencia XML sino que provino de la declaración predeterminada del atributo en la DTD.

Nota   Esta propiedad no siempre se aplica: depende del tipo de sistema de lectura empleado.

En la tabla siguiente se muestran los valores que la propiedad IsDefault puede devolver.

Implementación de XmlReader Valores devueltos
XmlTextReader Es false porque no hay información de DTD.
XmlValidatingReader Es true si el nodo actual es un atributo cuyo valor se generó a partir del valor predeterminado definido en la DTD o esquema. Es false si el valor del atributo se especificó explícitamente en la secuencia XML
XmlNodeReader Es true si la DTD se define en XmlDocument; en caso contrario, es false.
XsltReader Es false porque en el modelo de datos XPath no se expone ninguna información de la DTD (nodos DOCTYPE).

Cuando se coloca en un atributo, el método GetAttribute se usa para recuperar su valor.

Atributos en otros tipos de nodo

XmlTextReader y XmlValidatingReader sólo exponen atributos en nodos de tipo Element, XmlDeclaration y DocumentType. Al implementar las clases XmlReader para el tipo de nodo XmlDeclaration, las propiedades Version, Standalone y Encoding se devuelven como una cadena en la propiedad Value de XmlDeclaration. La propiedad Value no se puede devolver como string.Empty. Si está vacía, la clase DOM XmlDocument y otras clases que puedan depender de esta información no se pueden cargar a partir de la clase XmlReader.

Vea también

Leer XML con XmlReader | Ubicación del nodo actual en XmlReader | Configuración de propiedades en XmlReader | Comparación de objetos mediante XmlNameTable con XmlReader | Leer el contenido de elementos y atributos | Omitir contenido con XmlReader | Lectura y expansión de EntityReference | Comparar XmlReader con el sistema de lectura SAX | Leer datos XML con XmlTextReader | Leer árboles de nodos con XmlNodeReader | Validar XML con XmlValidatingReader | Creación de sistemas de lectura XML personalizados | XmlReader (Clase) | XmlReader (Miembros) | XmlNodeReader (Clase) | XmlNodeReader (Miembros) | XmlTextReader (Clase) | XmlTextReader (Miembros) | XmlValidatingReader (Clase) | XmlValidatingReader (Miembros)