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:
<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 "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:
{ 8 comments… read them below or add one }
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
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.
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
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 );
voy a probar gracias por tu ayuda y atencion te aviso
funciona de maravilla muchas gracias…
escribirle sera muy complicado tengo un codigo que he trabajado pero igual solo crea un registro y yo necesito que sea n registros
Olman, mi correo es jorge_machin@yahoo.com
Saludos