xmlParser

Introducción

Actualmente somos muchos los que utilizamos el sistema XML como método para almacenar o tratar información para nuestras aplicaciones. A lo largo y ancho de la red podemos encontrar información sobre las bondades de XML, pero lo que trataremos aquí es como usar un parser sencillo en nuestras aplicaciones C++.

La información que encontraremos a continuación se basa en el parser de libre distribución xmlParser. Es un parser escrito en C++, de tamaño muy reducido y muy portable ya que se puede compilar y usar en multitud de compiladores / sistemas operativos.

Os lo podéis descargar del siguiente link.

No olvidéis también hacerle una visita a su página web pues nos ofrece información sobre el parser, las versiones que lleva, etc.

Consideraciones

A la hora de incluir el *.h en nuestro código, tendremos que asegurarnos que el fichero tchar.h es incluido antes que el fichero strsafe.h, esto es así por un una necesidad del código, de lo contrario el propio compilador nos lo pedirá.

Declaración

El xmlParser parsea el fichero XML con una metodología DOM, es decir, generara un árbol lógico con los tags y nosotros podremos viajar por ellos de forma fácil consultando su valor.

Para poder declarar un objeto que contenga ese árbol, tendremos que definir un nodo y asignarlo al inicio del árbol del fichero/cadena XML.

#include "tchar.h"
#include "xmlParser.h"    
 
void main()
{
    XMLNode xMainNode = XMLNode::openFileHelper("NombreFichero.xml");
}

El anterior codigo define un nodo xMainNode que apunta al primer tag en el fichero "NombreFichero.xml", hemos usado una función que nos lee el fichero XML, nos lo parsea y nos deja inicializado el primer nodo.

Ahora solo queda viajar por el código y consultar los valores de los tags del árbol.

Consultar parámetros

Los parámetros son esas variables que se escriben a continuación de un tag, puede haber tantas como se requiera, no hay límite, pueden tener su nombre repetido.

Hemos de tener en cuenta que siempre vamos a recuperar el valor de estos parámetros en forma de cadena, y aquí entran dos variantes. Según tengamos definido en nuestro código, usaremos chars normales o wchar_t para recuperar esos valores.
Yo concretamente os recomiendo usar wchar_t o una cadena wstring de las STL para tal efecto. De lo contrario podéis usar una string de las STL para tratar los parámetros.

Veamos un ejemplo de parámetros

<Tag  parametro1=”Holaparametro2=”1.0345parametro3=”45parametro3=”Stringparametro3=”3.14159/>

En el tag anterior tenemos un total de 5 parámetros de los cuales 3 se llaman igual, y no es un error, veremos a continuación cuales son las maneras de acceder a estos parámetros:

Por nombre

Para recuperar un parámetro por su nombre lo haremos de la siguiente manera

#include <wstring>
 
#include "tchar.h"
#include "xmlParser.h"    
 
using namespace std;
 
void main()
{
    wstring wStr;
 
    XMLNode xMainNode = XMLNode::openFileHelper(L"NombreFichero.xml");
 
    wStr.assign(xMainNode.getAttribute(L"parametro1"));
}

Con el código anterior hemos recuperado la string “Hola” y ya la tenemos en un objeto wstring para ser tratado como queráis.

Por índice

Para recuperar un parámetro por su índice lo haremos de la siguiente manera

#include <wstring>
#include <sstream>
 
#include "tchar.h"
#include "xmlParser.h"    
 
using namespace std;
 
void main()
{
    float fSwap;
    wstring wStr;
    wstringstream wStream;
 
    XMLNode xMainNode = XMLNode::openFileHelper(L"NombreFichero.xml");
 
    wStr.assign(xMainNode.getAttribute(1));
    wStream.clear(); wStream << wStr; wStream >> fSwap;
}

En el código anterior podemos observar como accedemos al parámetro con índice 1, es decir, al segundo parámetro y lo pasamos por un stream de wstring, dando como resultado la variable fSwap con valor lógico 1.0345

Por nombre e índice

Para poder acceder al parámetro3 pero a la tercera instancia de este, lo podemos hacer de la siguiente manera:

#include <wstring>
#include <sstream>
 
#include "tchar.h"
#include "xmlParser.h"    
 
using namespace std;
 
void main()
{
    float fSwap;
    wstring wStr;
    wstringstream wStream;
 
    XMLNode xMainNode = XMLNode::openFileHelper(L"NombreFichero.xml");
 
    wStr.assign(xMainNode.getAttribute(L"Parametro3",3));
    wStream.clear(); wStream << wStr; wStream >> fSwap;
}

El código anterior nos da acceso al parámetro ‘Parametro3’ pero a la tercera de sus apariciones en ese tag. Como es de suponer, el valor de la variable fSwap es 3.14159

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License