CÓMO: Leer datos XML de una secuencia

Seleccione idioma Seleccione idioma
Id. de artículo: 301228 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E301228


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.
Expandir todo | Contraer todo

En esta página

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.

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.Xml
    Imports 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.StringReader
      stream = 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.NodeType
    Case 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 Select
    Loop
    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.NodeType
    Case 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 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
    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.Xml
    Imports System.IO
    Module 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 Sub
    
    End 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.

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", de MSDN Magazine en el siguiente sitio Web de Microsoft:
http://msdn.microsoft.com/library/periodic/period01/xml0101.htm
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:

Propiedades

Id. de artículo: 301228 - Última revisión: jueves, 25 de octubre de 2001 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft .NET Framework Software Development Kit 1.0
Palabras clave: 
kbhowto kbhowtomaster kbxml tslic_tslic KB301228
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.

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com