Compartir a través de


Leer el contenido de elementos y atributos

Para leer el contenido de elementos y atributos en una llamada, la clase XmlReader proporciona los métodos ReadInnerXml y ReadOuterXml. Cuando se coloca en un nodo, la propiedad ReadInnerXml extrae todo el contenido del nodo, incluido el marcado, a partir de la etiqueta del elemento hasta llegar a la etiqueta final. Después de la llamada de la propiedad ReadInnerXml, el sistema de lectura XmlReader se coloca después de la etiqueta final del elemento. Suponiendo la entrada XML siguiente:

Entrada

<Book>
 <Price Retail="29.95" />
 <Title BookTitle="My First Book" author="me" />
</Book>

Ésta es la salida que se devuelve al llamar a la propiedad ReadInnerXml cuando el sistema de lectura se coloca en el elemento Book:

 <Price Retail="29.95" />
 <Title BookTitle="My First Book" author="me" />

ReadInnerXml sitúa al sistema de lectura detrás de la etiqueta final del elemento que se está leyendo. Esto significa que para el ejemplo de entrada anterior, el nodo actual es el nodo situado tras el elemento de cierre </Book>, suponiendo que exista. Por tanto, incluir un método Read avanzaría al sistema de lectura un elemento adicional. En el siguiente código de ejemplo se muestra el nodo actual de la secuencia después de llamara a ReadInnerXml, y cómo ejecutar Read una vez que ReadInnerXml haya avanzado al sistema de lectura aún otro nodo más.

public static void Main() 
{
    string text = @"<book><one><title>ABC</title></one><two><price>24.95</price></two></book>";
    XmlTextReader reader = new XmlTextReader(new StringReader(text));
    reader.WhitespaceHandling = WhitespaceHandling.None;

    // Moves the reader to the 'book' node.
    reader.MoveToContent(); 

    // Moves the reader to the 'one' node.
    reader.Read(); 
    reader.MoveToContent();

    // Reads the inner XML of the 'one' node, which is the entire 'title'
    // node, and outputs <title>ABC</title>. 
    Console.WriteLine(reader.ReadInnerXml()); 

    // The reader is now positioned on the 'two' node.
    Console.WriteLine(reader.Name);

    // Calling Read will advance the reader beyond the 'two' node to 
    // the 'price' node.
    reader.Read();
    // Outputs the node of 'price'.
    Console.WriteLine(reader.Name);
}

El resultado del código es:

<title>ABC</title>

two

price

El método ReadInnerXml analiza el código XML y devuelve el contenido, en función del valor de XmlNodeType. En la tabla siguiente se muestra contenido de ejemplo de un elemento y un atributo, los valores devueltos al llamar al método ReadInnerXml y la posición del sistema de lectura después de la llamada.

Tipo de nodo Contenido secundario Valor devuelto Posición
Element <mielem> texto </mielem> text En el nodo situado tras el elemento final </mielem>
Attribute <mielem atr1="val1" atr2="val2"> texto </mielem> val1 Permanece en el nodo del atributo "atr1".

El resto de XmlNodeTypes devuelven string.Empty.

El método ReadOuterXml se comporta de forma similar al método ReadInnerXml excepto en que el valor devuelto incluye la etiqueta de inicio y de final. Cuando se coloca en un nodo hoja, la ejecución de este método es idéntica a la realización de una operación Read.

ReadOuterXml analiza XML y devuelve diverso contenido secundario, en función del valor actual de la propiedad XmlNodeType. En la tabla siguiente se muestra contenido de ejemplo de un elemento y un atributo, los valores devueltos al llamar al método ReadOuterXml y la posición del sistema de lectura después de la llamada.

Tipo de nodo Contenido secundario Valor devuelto Posición
Element <elem1> texto </elem1> <elem1> texto </elem1> Se coloca después de la etiqueta </elem1>.
Attribute <elem1 atr1="valorDeAtr1" atr2="valorDeAtr2" > texto </elem1> atr1="valorDeAtr1" Se coloca en el nodo del atributo "atr1".

El resto de los tipos de nodo devuelven string.Empty al método ReadOuterXml.

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 atributos con XmlReader | 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