Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

CÓMO: Leer datos XML de una secuencia

Este artículo se publicó anteriormente con el número E301228
Renuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.


No hay soporte técnico disponible para la versión Beta de este producto. Si desea información acerca de cómo obtener soporte técnico para una versión Beta, consulte la documentación incluida con los archivos del producto o busque en el sitio Web desde el que descargó la versión.
Resumen
Este artículo demuestra cómo utilizar la clase XmlTextReader para leer Lenguaje de marcado extensible (XML) desde una secuencia. La secuencia puede provenir de diversos orígenes, como por ejemplo una secuencia de bytes de un servidor, un archivo o una clase TextReader.

volver al principio

Requisitos

La lista siguiente describe el hardware, el software, la infraestructura y los service pack recomendados que se necesitarán:
  • Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Advanced Server o Windows NT 4.0 Server
  • Microsoft Visual Studio .NET
En el presente artículo se da por supuesto que está familiarizado con los temas siguientes:
  • Terminología de XML
  • Crear y leer XML

Cómo leer datos XML de una secuencia

  1. Abra Visual Studio .NET.
  2. Cree una nueva aplicación de consola Microsoft Visual Basic (VB) o Microsoft Visual C#.

    NOTA: los siguientes pasos proporcionan una descripción detallada de cómo crear la aplicación. Asimismo, también puede ir directamente al paso 10, donde se proporciona código completo.
  3. Asegúrese de que el proyecto contiene una referencia al espacio de nombres System.Xml y System.IO
  4. Utilice la instrucción IMPORTS en el espacio de nombre Xml para que no se le pida calificar las declaraciones XmlTextReader en dicho espacio de nombres más adelante en el código. Debe utilizar la instrucción IMPORTS antes que cualquier otra declaración de la siguiente manera:
    Código de Visual Basic .NET
    Imports System.XmlImports System.IO
    Código de Visual C#
    using System.Xml;using System.IO;
  5. Cree o recupere la secuencia XML. Una secuencia es una representación abstracta de un dispositivo de entrada o de salida, es decir, el origen o el destino de los datos (en este caso, datos XML). Puede escribir en una secuencia o leer de ella, lo que mejor se visualice como un flujo de bytes.

    Las secuencias se utilizan para proporcionar independencia con respecto al dispositivo; por lo tanto, no se necesitarán cambios de programa si, por ejemplo, cambia el origen de una secuencia. Existen unos cuantos métodos para crear una secuencia para la clase XmlTextReader. Seleccione uno de los siguientes ejemplos de código para agregarlo al procedimiento principal del módulo predeterminado:
    • Ejemplo de código que utiliza el objeto StringReader:

      El objeto StringReader lee caracteres de cadenas y adopta un valor de cadena durante la construcción.Código de Visual Basic .NET
      Dim stream as System.IO.StringReaderstream = new StringReader("<?xml version='1.0'?>" & _"<!-- This file is a book store inventory. -->" & _"<bookstore>" & _" <book genre=""autobiography"" ISBN=""1-861003-11-0"">" & _"   <title>The Autobiography of Benjamin Franklin</title>" & _"   <author>" & _"       <first-name>Benjamin</first-name>" & _"       <last-name>Franklin</last-name>" & _"   </author>" & _"   <price>8.99</price>" & _" </book>" & _"</bookstore>")
      Código de C#
      StringReader stream;stream = new StringReader("<?xml version='1.0'?>" +	"<!-- This file represents a fragment of a book store inventory database. -->" +	"<bookstore>" +	" <book genre=\"autobiography\" publicationdate=\"1981\" ISBN=\"1-861003-11-0\">" +	"   <title>The Autobiography of Benjamin Franklin</title>" +	"   <author>" +	"       <first-name>Benjamin</first-name>" +	"       <last-name>Franklin</last-name>" +	"   </author>" +	"   <price>8.99</price>" +	" </book>" +	" <book genre=\"novel\" publicationdate=\"1967\" ISBN=\"0-201-63361-2\">" +	"   <title>The Confidence Man</title>" +	"   <author>" +	"       <first-name>Herman</first-name>" +	"       <last-name>Melville</last-name>" +	"   </author>" +	"   <price>11.99</price>" +	" </book>" +	"  <book genre=\"philosophy\" publicationdate=\"1991\" ISBN=\"1-861001-57-6\">" +	"   <title>The Gorgias</title>" +	"   <author>" +	"       <name>Plato</name>" +	"   </author>" +	"   <price>9.99</price>" +	" </book>" +	"</bookstore>");
    • Ejemplo de código que utiliza el objeto StreamReader:

      El objeto StreamReader se utiliza para leer caracteres en archivos. Lee el nombre de archivo que se leerá durante la construcción:Código de Visual Basic .NET
      Dim stream as System.IO.StreamReader' Carga los datos XML en el archivo books.xml en una nueva secuencia.stream = New StreamReader ("books.xml")
      Código de C#
      System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");
      Tenga en cuenta que aquí se utiliza el archivo Books.xml. Puede crear su propio archivo Books.xml. Un ejemplo del archivo Books.xml se incluye también con Visual Studio .Net y el SDK de .Net Framework.

  6. Construya una clase XmlTextReader con la secuencia. Generalmente, XmlTextReader se utiliza si necesita tener acceso a XML como datos sin procesar sin la carga de un DOM; por lo tanto, XmlTextReader proporciona un mecanismo más rápido para leer XML. XmlTextReader tiene diferentes constructores para especificar la ubicación de datos de XML. El siguiente código carga XmlTextReader desde una secuencia:
    Código de Visual Basic .NET
    Dim reader As XmlTextReader = New XmlTextReader (stream)
    Código de C#
    XmlTextReader reader = null;	reader = new XmlTextReader (stream);
  7. Lea XML. Una vez cargado, XmlTextReader realiza lecturas secuenciales para moverse por los datos de XML y utiliza el método Read para ir al siguiente registro. Devuelve False si no hay más registros.
    Código de Visual Basic .NET
    Do While (reader.Read())    ' Trabajar aquí en los datos.    Console.WriteLine(reader.Name)Loop' La lectura del archivo XML ha terminado.Console.ReadLine() 'Pause
    Código de C#
    while (reader.Read()){    // Trabajar aquí en los datos.    ...}while (reader.Read()){    // Trabajar aquí en los datos.	Console.WriteLine(reader.Name);}Console.ReadLine();
  8. Inspeccionar los nodos. Para procesar los datos de XML, cada registro tiene un tipo de nodo, que puede estar determinado por la propiedad NodeType. Las propiedades Nombre y Valor devuelven el nombre del nodo (los nombres del elemento y del atributo) y el valor del nodo (el texto del nodo) del nodo actual (o registro). La enumeración NodeType determina el tipo de nodo. El siguiente ejemplo muestra el nombre de los elementos y el tipo de documento. Tenga en cuenta que este ejemplo omite los atributos de los elementos.
    Código de Visual Basic .NET
    Do While (reader.Read())Select Case reader.NodeTypeCase XmlNodeType.Element 'Mostrar comienzo del elemento.Console.Write("<" + reader.Name)Console.WriteLine(">")Case XmlNodeType.Text 'Mostrar el texto en cada elemento.Console.WriteLine(reader.Value)Case XmlNodeType.EndElement 'Mostrar final del elemento.Console.Write("</" + reader.Name)Console.WriteLine(">")End SelectLoop
    Código de C#
    while (reader.Read()){    switch (reader.NodeType)    {        case XmlNodeType.Element: // El nodo es un Elemento.            Console.Write("<" + reader.Name);   Console.WriteLine(">");            break;  case XmlNodeType.Text: //Mostrar el texto en cada elemento.            Console.WriteLine (reader.Value);            break;  case XmlNodeType. EndElement: //Mostrar fin del elemento.            Console.Write("</" + reader.Name);   Console.WriteLine(">");            break;    }}
  9. Inspeccionar los atributos. Los tipos de nodos de elementos pueden incluir una lista de nodos de atributos que están asociados con ellos. El método MovetoNextAttribute se mueve secuencialmente por cada atributo del elemento. Utilice la propiedad HasAttributes para probar si el nodo tiene algún atributo. La propiedad AttributeCount devuelve el número de atributos del nodo actual.
    Código de Visual Basic .NET
    Do While (reader.Read())Select Case reader.NodeTypeCase XmlNodeType.Element 'Mostrar comienzo del elemento.Console.Write("<" + reader.Name)         If reader.HasAttributes Then 'If attributes exist         	While reader.MoveToNextAttribute()					'Mostrar nombre y valor del atributo.Console.Write(" {0}='{1}'", reader.Name, reader.Value)End WhileEnd IfConsole.WriteLine(">")Case XmlNodeType.Text 'Mostrar el texto de cada elemento.Console.WriteLine(reader.Value)Case XmlNodeType.EndElement 'Mostrar final del elemento.Console.Write("</" + reader.Name)Console.WriteLine(">")End SelectLoop
    Código de C#
    while (reader.Read()){    switch (reader.NodeType)    {        case XmlNodeType.Element: // El nodo es un Elemento.            Console.Write("<" + reader.Name);            while (reader.MoveToNextAttribute()) // Leer atributos.                Console.Write(" " + reader.Name + "='" + reader.Value + "'");            Console.Write(">");   Console.WriteLine(">");            break;  case XmlNodeType.Text: //Mostrar el texto en cada elemento.            Console.WriteLine (reader.Value);            break;  case XmlNodeType. EndElement: //Mostrar fin del elemento.            Console.Write("</" + reader.Name);   Console.WriteLine(">");            break;    }}

  10. Para su comodidad aquí se proporciona código completo.
    Código de Visual Basic.Net
    Imports System.XmlImports System.IOModule Module1    Sub Main()        Dim stream As System.IO.StreamReader        ' Carga los datos XML en el archivo books.xml en una nueva secuencia.        stream = New StreamReader("books.xml")        Dim reader As XmlTextReader = New XmlTextReader(stream)        Do While (reader.Read())            Select Case reader.NodeType                Case XmlNodeType.Element 'Mostrar principio del elemento.                    Console.Write("<" + reader.Name)                    If reader.HasAttributes Then 'If attributes exist                        While reader.MoveToNextAttribute()                            'Mostrar nombre y valor del atributo.                            Console.Write(" {0}='{1}'", reader.Name, reader.Value)                        End While                    End If                    Console.WriteLine(">")                Case XmlNodeType.Text 'Mostrar el texto de cada elemento.                    Console.WriteLine(reader.Value)                Case XmlNodeType.EndElement 'Mostrar final del elemento.                    Console.Write("</" + reader.Name)                    Console.WriteLine(">")            End Select        Loop    End SubEnd Module

    Código de C#
    using System;using System.Xml;using System.IO;namespace ReadXMLFromStream{	/// <summary>	/// Descripción de resumen para Class1.	/// </summary>	class Class1	{		static void Main(string[] args)		{			System.IO.StreamReader stream = new System.IO.StreamReader ("books.xml");			XmlTextReader reader = null;				reader = new XmlTextReader (stream);			while (reader.Read())			{				switch (reader.NodeType)				{					case XmlNodeType.Element: // El nodo es un Elemento.						Console.Write("<" + reader.Name);						while (reader.MoveToNextAttribute()) // Leer atributos.							Console.Write(" " + reader.Name + "='" + reader.Value + "'");						Console.Write(">");						Console.WriteLine(">");						break;					case XmlNodeType.Text: //Mostrar el texto en cada elemento.						Console.WriteLine (reader.Value);						break;					case XmlNodeType. EndElement: //Mostrar fin del elemento.						Console.Write("</" + reader.Name);						Console.WriteLine(">");						break;				}			}		}	}}
  11. Construya y ejecute su proyecto.
volver al principio

REFERENCIAS

Para obtener más información, consulte el artículo "XML in Microsoft .NET: .NET Framework XML Classes and C# Offer Simple, Scalable Data Manipulation", deMSDN Magazineen el siguiente sitio Web de Microsoft:Para obtener más información acerca de las clases XmlReader, StreamReader y StringReader, consulte la documentación de la biblioteca de clases de Microsoft .NET Framework.

Para obtener más información acerca de cómo utilizar XmlReader para leer datos de XML, consulte la documentación de la guía del programador de Microsoft .NET Framework:

volver al principio
dotnet xml
Propiedades

Id. de artículo: 301228 - Última revisión: 10/25/2001 10:50:00 - Revisión: 1.0

  • Microsoft .NET Framework Software Development Kit 1.0
  • kbhowto kbhowtomaster kbxml tslic_tslic KB301228
Comentarios