Cómo leer XML de un archivo mediante Visual C#

Seleccione idioma Seleccione idioma
Id. de artículo: 307548 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describe cómo utilizar la clase XmlTextReader para leer Lenguaje de marcado Extensible (XML, Extensible Markup Language) de un archivo. XmlTextReader proporciona análisis directo y encadenamiento de XML e implementa el XML 1.0 especificación, así como los espacios de nombres de la especificación XML del World Wide Web Consortium (W3C). Este artículo proporciona acceso secuencial rápido y señalizado a XML en lugar de utilizar un modelo de objetos como XML Document Object Model (DOM).

Requisitos

La lista siguiente describe el hardware recomendado, software, infraestructura de red y service Pack que necesitan:
  • Microsoft Visual Studio 2005 o Microsoft Visual Studio .NET
En este artículo se supone que está familiarizado con los temas siguientes:
  • Terminología XML
  • Crear y leer un archivo XML

Cómo leer XML de un archivo

Este ejemplo utiliza un archivo llamado Books.xml. Puede crear su propio archivo Books.xml o utilizar el archivo de ejemplo que se incluye en los tutoriales del Kit de desarrollo de Software (SDK) de .NET en la carpeta siguiente:
\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Samples\QuickStart\Howto\Samples\Xml\Transformxml\Cs
Debe copiar el archivo Books.xml en la carpeta \Bin\Debug, que se encuentra en la carpeta en la que creó este proyecto. Books.XML también está disponible para su descarga. Consulte a la "Referencias"sección para la ubicación de descarga.
  1. Inicie Visual Studio .NET o Visual Studio 2005 de.
  2. Cree una nueva aplicación de consola de Visual C#. Continúe directamente en la "Lista de código completa"o continuar con estos pasos para generar la aplicación.
  3. Asegúrese de que el proyecto contiene una referencia al ensamblado System.Xml.dll .
  4. Especifique la directiva using de espacio de nombres System.Xml para que no tenga que calificar las declaraciones de XmlTextReader más adelante en el código. Debe utilizar la directiva using antes que cualquier otra declaración.
    using System.Xml;
    					
  5. Crear una instancia de un objeto XmlTextReader y llénela con el archivo XML. Normalmente, la clase XmlTextReader se utiliza si necesita tener acceso a XML como datos sin procesar sin la carga de un DOM; por lo tanto, la clase XmlTextReader proporciona un mecanismo más rápido para leer XML. La clase XmlTextReader tiene diferentes constructores para especificar la ubicación de los datos XML. El código siguiente crea una instancia de la clase XmlTextReader y carga el archivo Books.xml. Agregue el código siguiente al procedimiento Main de Class1.
    XmlTextReader reader = new XmlTextReader ("books.xml");
    					
  6. Lea el archivo XML. (Tenga en cuenta que este paso muestra un bucle exterior "while" y que los dos pasos siguientes muestran cómo utilizar el bucle para leer el archivo XML). Después de crear el objeto XmlTextReader , utilice el método de lectura para leer los datos XML. El método de lectura continúa mueve secuencialmente por el archivo XML hasta llegar al final del archivo, donde el método Read devuelve un valor de "False".
    while (reader.Read()) 
    {
        // Do some work here on the data.
    	Console.WriteLine(reader.Name);
    }
    Console.ReadLine();
    					
  7. Inspeccione los nodos. Para procesar los datos XML, cada registro tiene un tipo de nodo que puede estar determinado por la propiedad NodeType . Las propiedades de nombre y valor devuelven el nombre del nodo (los nombres de elemento y 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 código de ejemplo siguiente muestra el nombre de los elementos y el tipo de documento. Tenga en cuenta que este ejemplo omite los atributos del elemento.
    while (reader.Read()) 
    {
        switch (reader.NodeType) 
        {
            case XmlNodeType.Element: // The node is an element.
                Console.Write("<" + reader.Name);
       Console.WriteLine(">");
                break;
      case XmlNodeType.Text: //Display the text in each element.
                Console.WriteLine (reader.Value);
                break;
      case XmlNodeType. EndElement: //Display the end of the element.
                Console.Write("</" + reader.Name);
       Console.WriteLine(">");
                break;
        }
    }
    					
  8. Inspeccione los atributos. Los tipos de nodo de elemento pueden incluir una lista de nodos de atributo asociados a 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.
    while (reader.Read()) 
    {
           switch (reader.NodeType) 
           {
               case XmlNodeType.Element: // The node is an element.
                   Console.Write("<" + reader.Name);
    
                   while (reader.MoveToNextAttribute()) // Read the attributes.
                       Console.Write(" " + reader.Name + "='" + reader.Value + "'");
          Console.WriteLine(">");
                   break;
         case XmlNodeType.Text: //Display the text in each element.
                   Console.WriteLine (reader.Value);
                   break;
         case XmlNodeType. EndElement: //Display the end of the element.
                   Console.Write("</" + reader.Name);
          Console.WriteLine(">");
                   break;
           }
       }
    					
  9. Guarde y cierre el proyecto.

Lista de código completa

using System;
using System.Xml;

namespace ReadXMLfromFile
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        static void Main(string[] args)
        {
            XmlTextReader reader = new XmlTextReader ("books.xml");
            while (reader.Read()) 
            {
                switch (reader.NodeType) 
                {
                    case XmlNodeType.Element: // The node is an element.
                        Console.Write("<" + reader.Name);
                        Console.WriteLine(">");
                        break;
                    case XmlNodeType.Text: //Display the text in each element.
                        Console.WriteLine (reader.Value);
                        break;
                    case XmlNodeType.EndElement: //Display the end of the element.
                        Console.Write("</" + reader.Name);
                        Console.WriteLine(">");
                        break;
                }
            }
            Console.ReadLine();
        }
    }
}
				

Resultado de ejemplo

<bookstore>
<book>
<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>
<title>
The Confidence Man
</title>
<author>
<first-name>
Herman
</first-name>
<last-name>
Melville
</last-name>
</author>
<price>
11.99
</price>
</book>
<book>
<title>
The Gorgias
</title>
<author>
<name>
Plato
</name>
</author>
<price>
9.99
</price>
</book>
</bookstore>
				

Solución de problemas

Cuando pruebe el código, puede aparecer el siguiente mensaje de error de excepción: excepción no controlada: System.Xml.XmlException: declaración XML inesperada. La declaración XML debe ser el primer nodo del documento, y pueden aparecer antes de que no hay espacios en blanco.

Información adicional: error del sistema. El error de excepción se produce en la siguiente línea de código: mientras
(reader.Read())
El error de excepción se debe a una instrucción de procesamiento no válida. Por ejemplo, la instrucción de procesamiento puede contener espacios. El siguiente es un ejemplo de una instrucción de procesamiento no válida:
<?xml version='1.0' ?>
Esta etiqueta xml tiene un espacio anterior el '<? bracket.="" remove="" the="" preceding="" whitespace="" to="" resolve="" the=""></?>

REFERENCIAS

El siguiente archivo está disponible para su descarga desde el centro de descarga de Microsoft:
Contraer esta imagenAmpliar esta imagen
Descargar
Descargue ahora el paquete Books.exe.
Para obtener más información acerca de las clases XML de.NET Framework y C#, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):
http://msdn.Microsoft.com/en-us/Magazine/cc302158.aspx
Para obtener más información acerca de la clase XmlReader , visite el siguiente sitio Web de MSDN:
http://msdn2.Microsoft.com/en-us/library/System.Xml.XmlReader (vs.71).aspx
Para obtener más información acerca de cómo utilizar XmlReader para leer datos XML, visite los siguientes sitios Web de MSDN:
http://msdn2.Microsoft.com/en-us/library/aa720470 (VS.71).aspx

http://msdn2.Microsoft.com/en-us/library/tfz3cz6w (vs.71).aspx

Propiedades

Id. de artículo: 307548 - Última revisión: lunes, 3 de marzo de 2014 - Versión: 4.0
La información de este artículo se refiere a:
  • Microsoft Visual C# 2008 Express Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
Palabras clave: 
kbdownload kbhowtomaster kbmt KB307548 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 307548

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