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)