Snapshot: leyendo archivos XML en C++ con TinyXML

by Jorge Machin on December 1, 2008 · 8 comments

in C/C++, Snapshots

La biblioteca TinyXML es muy liviana y permite parsear rapidamente XMLs sin tener que hacer mucho formalismo. En este post presento un código de ejemplo:

El xml que queremos parsear como ejemplo es el siguiente:

<?xml version="1.0">

<ELEMENT attribute="attribute">
   <CHILD>child</CHILD>
</ELEMENT>

Lo grabamos con el nombre ejemplo.xml.

A continuación el programa en c++ que realiza el parseo:

#include <iostream>

#include "tinyxml.h"

using namespace std;

int main() {

  TiXmlDocument doc;

  if ( !doc.LoadFile( "ejemplo.xml" ) )  {

    cout <<"Error: Can't load file ejemplo.xml" << endl;
    return EXIT_FAILURE;

  }

  string attribute, child_value;

  TiXmlElement *element;

  element = doc.FirstChildElement( "ELEMENT" );

  if ( element->Attribute( "attribute" ) != NULL )

      attribute = string ( element->Attribute( "attribute" ) );

  cout <<"attribute: " <<attribute <<endl;

  TiXmlElement* child = element->FirstChildElement("CHILD");

  if ( child != NULL )

    child_value = string( ( ( child->FirstChild() )->ToText() )->Value() );

  cout <<"child value: " <<child_value <<endl;

  return EXIT_SUCCESS;

}

Lo grabamos como main.cpp y lo compilamos con:

g++ -o main main.cpp -ltinyxml

{ 8 comments… read them below or add one }

Olman June 10, 2010 at 9:38 am

Me da error en esta linea :
child_value = string( ( ( child->FirstChild() )->ToText() )->Value() );

dice ke child_value no ha sido declarado…..Si pudieras ayudarme te lo agradeceria por que hasta ahora consigo un ejm sencillo por que nunca antes habia trabajado con xml ni conocia esta libreria TinyXML Gracias de antemano

Jorge Machin June 10, 2010 at 11:39 am

Olman:

Se me fue accidentalmente una i en la declaración de child_value. Seguramente fue en alguna edición de este post.

Muchas gracias por hacermelo notar. Ya está corregido.

Olman June 10, 2010 at 4:44 pm

Esta bueno el ejemplo pero este lee un nodo como haria para leer el segundo o n cantidad de nodos de un xml.

de eso se trata el proyecto que me pusieron me veo forzado a usar tinyxml por que el proyecto hay que desarrollarlo en c++ con dev c++ estrictamente y ese programa para este tipo de aplicaciones no es muy amigable

Necesito leer insertar en un archivo xml

Jorge Machin June 10, 2010 at 6:54 pm

Olman:

Para iterar sobre el XML, necesitas usar la función NextSiblingElement ya sea pasandole el nombre del elemento que te interesa o sin parametros si quieres el que sigue en el nivel.

TiXmlElement *element;

element = doc.FirstChildElement( “ELEMENT” );

do {
:
:
element = element->NextSiblingElement( “ELEMENT” ); // o “NEXT_ELEMENT”

ó

element = element->NextSiblingElement();

} while ( element );

Olman June 11, 2010 at 8:39 am

voy a probar gracias por tu ayuda y atencion te aviso

Olman June 11, 2010 at 12:42 pm

funciona de maravilla muchas gracias…

Olman June 11, 2010 at 12:44 pm

escribirle sera muy complicado tengo un codigo que he trabajado pero igual solo crea un registro y yo necesito que sea n registros

Jorge Machin June 11, 2010 at 1:31 pm

Olman, mi correo es jorge_machin@yahoo.com

Saludos

Leave a Comment

Previous post:

Next post: