Hola gente, les escribo para preguntarles algo q se q es una pavada pero q me esta volviendo loco.
Estoy haciendo una clase "CXMLParser" y me surgio una duda. Antes q nada, les cuento q estoy usando la libxml2 bajo GNU/LINUX. Personalmente tengo la distribucion Mandrake 9.2, pero creo q no va al caso todo esto.
Les hago una pequeña introduccion:
Primero les digo q esto en si no es exactamente lo q estoy haciendo (porque seria demasiado largo de explicar y no va al problema en cuestion) pero la adaptacion q estoy pensando sirve perfectamente y creo q queda bastante clara.
Tengo una clase "CInfoDeArchivos", la cual tiene como atributos al nombre del archivo, la fecha de modificacion y al tamaño. Todos estos atributos son de tipo std::string . Tengo obviamente un "seter" para cada atributo.
La clase "CXMLParser" tiene como atributo a un objeto de la clase"CInfoDeArchivos" y por supuesto al "seter" correspondiente.
El problema viene en esta parte del XML q tengo:
.........
<ListaDeArchivos>
<Archivo nombre='introduccion.txt' tamanio='5Kb' fechamodif='05042004'>
<Archivo nombre='hola.txt' tamanio='50Kb' fechamodif='23022004'>
<Archivo nombre='nada.txt' tamanio='37Kb' fechamodif='05092002'>
<ListaDeArchivos>
...........
Recorro perfectamente hasta q entro en ListaDeAcrhivos, entro perfectamente y hago algo asi:
xmlChar* ContenidoNombre;
xmlChar* ContenidoTamanio;
xmlChar* ContenidoFecha;
xmlAttr* Atributo;
CInfoDeArchivos Info;
Atributo = (xmlAttr *)NodoActual->properties;
while (Atributo != NULL)
{
if (!xmlStrcmp(Atributo->name, (const xmlChar *) "NOMBRE"))
{
ContenidoNombre = xmlGetProp(NodoActual, Atributo->name);
Info.setNombre(ContenidoNombre);
xmlFree(ContenidoNombre);
}
if (!xmlStrcmp(Atributo->name, (const xmlChar *) "TAMANIO"))
{
ContenidoTamanio = xmlGetProp(NodoActual, Atributo->name);
Info.setTamanio(ContenidoTamanio);
xmlFree(ContenidoTamanio);
}
if (!xmlStrcmp(Atributo->name, (const xmlChar *) "FECHAMODIF"))
{
ContenidoFecha = xmlGetProp(NodoActual, Atributo->name);
Info.setFecha(ContenidoFecha);
xmlFree(ContenidoFecha);
}
Atributo = Atributo->next;
}
this->getComando().setArchivo(Info);
Y lo q hace la maldita aplicacion es cargar solo de una cosa a la vez. esto entiendo mas o menos porque lo hace, porque recorre los tres atributos del tag <Archivo> pero yo no cargo el "Info" hasta no salir del ultimo scope.
Como se ve, lo mio no tiene mucho q ver con el XML, pero quizas el ejemplo sirva de algo. Lo q me esta pasando es q no puedo setear un atributo de un objeto bien. No es q el seter este mal hecho ni nada de eso, es como q esta haciendo algo mal y no me doy cuenta.
Aclaro q los xmlFree() deben ir asi porque si no pincha todo.
Les mando salu2 y aquella persona q me pueda dar una mano, se los agradecere