Cómo leer los datos XML desde un archivo mediante Visual C++


Para una versión de Microsoft Visual C# .NET de este artículo, consulte
307548 .

Para una versión de Microsoft Visual Basic .NET de este artículo, consulte
301225 .

Este artículo hace referencia al siguiente espacio de nombres de biblioteca de clases de Microsoft.NET Framework:

System.xml

EN ESTA TAREA

Resumen


Este artículo describe cómo utilizar la clase XmlTextReader para leer los datos XML de un archivo. La clase XmlTextReader proporciona análisis directo y encadenamiento de los datos XML. La
Clase XmlTextReader también implementa la especificación XML 1.0, además de los espacios de nombres de la especificación XML definido por el World Wide Web Consortium (W3C). En este artículo se describe cómo rápido, con tokens de acceso de secuencias a los datos XML en lugar de utilizar un modelo de objetos, tales como XML Document Object Model (DOM).

Volver al principio

Requisitos

En este artículo se supone que está familiarizado con los temas siguientes:
  • Terminología XML
  • Cómo crear y cómo leer un archivo XML

La lista siguiente describe el hardware, software, infraestructura de red y service packs recomendados que necesita:
  • Microsoft Visual Studio .NET
  • Microsoft Visual Studio 2005
Volver al principio

Leer los datos XML desde un archivo

En el ejemplo de este artículo utiliza un archivo denominado Books.xml. Puede crear su propio archivo Books.xml o puede utilizar el archivo de ejemplo que se incluye con los tutoriales rápidos de Microsoft .NET Software Development Kit (SDK). El archivo Books.xml también está disponible para su descarga desde Microsoft Download Center:Debe copiar el archivo Books.xml en la carpeta de proyecto.


Para leer los datos XML desde un archivo, siga estos pasos:
  1. Inicie Visual Studio .NET 2002, Visual Studio .NET 2003 o Visual Studio 2005.
  2. En el menú archivo , elija
    De nuevoy, a continuación, haga clic en proyecto.

    La
    Aparece el cuadro de diálogo Nuevo proyecto .
  3. En Tipos de proyecto, elija Proyectos de Visual C++.

    Nota: En Visual Studio 2005, los Proyectos de Visual C++ se cambia a Visual C++.
  4. En plantillas, haga clic en
    Aplicación C++ administrada si está utilizando Visual Studio .NET 2002.

    En plantillas, haga clic en Aplicación de consola (. NET) si está utilizando Visual Studio .NET 2003.


    En plantillas, haga clic en Aplicación de consola CLR , si está utilizando Visual Studio 2005.
  5. En el cuadro nombre , escriba
    Q815658y, a continuación, haga clic en Aceptar.
  6. Agregue una referencia a System.xml.dll en el proyecto. Para obtener información adicional acerca de cómo agregar referencias a un proyecto administrado de Visual C++, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

    310674 HOW TO: agregar referencias a un proyecto de Visual C++ administrado

  7. Especifique el con la directiva en el espacio de nombres XML como sigue:
    using namespace System::Xml;
    Para ello, para que no tenga que calificar las declaraciones de clase XmlTextReader más adelante en el código. Debe usar el mediante la directiva antes que cualquier otra declaración.
  8. Cree una instancia del objeto XmlTextReader . Rellenar el objeto XmlTextReader con el archivo XML.

    Normalmente, la clase XmlTextReader se utiliza si necesita tener acceso a los datos XML sin procesar sin la carga del DOM. Por lo tanto, la clase XmlTextReader proporciona una manera más rápida de leer los datos XML. La clase XmlTextReader tiene diferentes constructores que especifican la ubicación de los datos XML.

    El código siguiente crea una instancia de la clase XmlTextReader y, a continuación, carga el archivo Books.xml. Agregue el código siguiente a la función _tmain :
    XmlTextReader* reader = new XmlTextReader ("books.xml");
    Nota: En Visual C++ 2005, la función _tmain se cambia a la función main .
  9. Lea los datos XML.

    Nota: Este paso muestra un bucle exterior mientras . Los dos pasos que seguir este paso muestran cómo utilizar el bucle while para leer los datos XML.

    Después de crear el objeto XmlTextReader , utilice el método de lectura para leer los datos XML.

    El método Read continúa para desplazarse secuencialmente por el archivo .xml hasta que el método Read alcanza el final del archivo. Cuando el método Read alcanza el final del archivo, el método Read devuelve false.
    while (reader->Read()){
    // Do some work here on the data.
    Console::WriteLine(reader->Name);
    }
  10. Examine los nodos.

    Para procesar los datos XML, cada registro tiene un tipo de nodo que puede estar determinado por la propiedad NodeType . La propiedad Name y la propiedad Value devuelven la siguiente información para el nodo actual o para el registro actual:
    • El nombre del nodo que es el nombre del elemento y el nombre del atributo.
    • El valor del nodo que es el texto del nodo.
    La enumeración NodeType determina el tipo de nodo. El ejemplo de código siguiente muestra el nombre de los elementos y el tipo de documento. En el siguiente ejemplo de código se omite los atributos del elemento:
    while (reader->Read()){
    switch (reader->NodeType)
    {
    case XmlNodeType::Element: // The node is an element.
    Console::Write("<{0}", 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("</{0}", reader->Name);
    Console::WriteLine(">");
    break;
    }
    }
  11. Examine los atributos.

    Tipos de nodo de elemento pueden incluir una lista de nodos de atributo asociados a los tipos de nodo de elemento. 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("<{0}", reader->Name);

    while (reader->MoveToNextAttribute()) // Read the attributes.
    Console::Write(" {0}='{1}'", 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("</{0}", reader->Name);
    Console::WriteLine(">");
    break;
    }
    }
  12. Guarde la solución. Genere la solución.
  13. Presione CTRL + F5 para ejecutar la aplicación de ejemplo.
Volver al principio

Ver el código completo en Visual Studio .NET 2002 o Visual Studio .NET 2003

#include "stdafx.h"#include <tchar.h>

#using <mscorlib.dll>
#using <System.xml.dll>

using namespace System;
using namespace System::Xml;

void _tmain(void)
{
XmlTextReader* reader = new XmlTextReader ("books.xml");

while (reader->Read())
{
switch (reader->NodeType)
{
case XmlNodeType::Element: // The node is an element.
Console::Write("<{0}", reader->Name);

while (reader->MoveToNextAttribute()) // Read the attributes.
Console::Write(" {0}='{1}'", 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("</{0}", reader->Name);
Console::WriteLine(">");
break;
}
}
Console::ReadLine();
}
Nota: Debe agregar la opción de compilador de common language runtime soporte (/ CLR: oldSyntax) en Visual C++ 2005 para compilar correctamente el ejemplo de código anterior. Para agregar la opción de compilador de common language runtime compatibilidad en Visual C++ 2005, siga estos pasos:

  1. Haga clic en proyectoy, a continuación, haga clic en Propiedades de < NombreDeProyecto > .



    Nota: < ProjectName > es un marcador de posición para el nombre del proyecto.
  2. Expanda Propiedades de configuracióny, a continuación, haga clic en General.

  3. Haga clic para seleccionar compatible con Common Language Runtime, sintaxis antigua (/ CLR: oldSyntax) en la configuración de proyecto compatibilidad con Common Language Runtime en el panel derecho, haga clic en Aplicary, a continuación, haga clic en Aceptar.

Para obtener más información acerca de common language runtime admite opción de compilador, visite el siguiente sitio Web de Microsoft:
/CLR (compilación de common Language Runtime)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
Estos pasos se aplican a todo el artículo.

Volver al principio

Ver el resultado del ejemplo

Nota: El archivo Books.xml que se incluye en los tutoriales del SDK de .NET tiene dos diferencias desde el archivo Books.xml desde el vínculo de descarga que se menciona en la sección de "Lectura de los datos XML desde un archivo".
  • No tiene el archivo Books.xml desde el vínculo para descargar el
    atributo publicationdate .
  • No tiene el archivo Books.xml desde el vínculo para descargar el
    Atributo ISBN .
<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>
Volver al principio

Solución de problemas

Al ejecutar la aplicación de ejemplo, puede recibir el siguiente mensaje de error:

Se ha producido una excepción no controlada del tipo System.Xml.XmlException en System.xml.dll
Información adicional: error del sistema.
Puede recibir este mensaje de error si utiliza el archivo Books.xml desde el vínculo de descarga que se menciona en la sección de "Lectura de los datos XML desde un archivo". Este problema puede producirse si el archivo Books.xml tiene un espacio en blanco al principio del archivo. Para resolver este problema, abra el archivo Books.xml mediante un editor de texto y, a continuación, quite el espacio en blanco.

Volver al principio

Referencias


Para obtener información adicional acerca de cómo leer XML con XmlReader, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):Volver al principio