SoloCodigo
Programación General => C/C++ => Mensaje iniciado por: nicokiki en Martes 27 de Abril de 2004, 06:23
-
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
-
Hola de nuevo, les quiero corregir unas cositas q escribi por ahi:
1.- El tag archivo me olvide de cerrarlo, perdon, pero no es q copie y pegue cosas, lo hice todo en el momento.
2.- Puse "cout" entre todos los "if", o sea, cuando iba geteando el contenido del XML y los tira perfecto por pantalla, asi q el problema es q los estoy seteando mal en la clase y no me doy ecuenta del error.
Salu2!!!!!!
-
Hola gente, les cuento q ya solucione el temita anterior de una manera medio india, pero
esta solucionado al fin y al cabo.
En conclusion, ya logre parsear un XML de un string de la stl. Ahora se viene el problema inverso.
El problema q ahora me lleva a escribirles es q no se como guardar el XML genrado en un string de la
STL ni en un char* ni en un xmlChar* ni en nada de eso (porque de cualquiera de esas tres
formas, con un simple casteo, puedo cargarlo en un string de la STL). Lo q si se hacer es
guardar el XML en un archivo.xml (haciendo xmlSaveFileEnc(const char* Filename, xmlDocPtr Document,
(const xmlChar*)Encoding ); ) pero en mi caso eso es innecesario ya q lo q tengo en XML viaja
por sockets.
Lo q querria saber seria algo asi q no se si existe: "xmlChar* xmlSaveMemory(Document, encoding)" y
los q encontre en los .h de la libreria no me resultan intuitivos a la vista. Si alguien sabe como
hacer esto q quiero, por favor escucho ofertas.
Salu2!!!!
-
Ya lo solucione
Salu2!!!!
P.D.: si a alguien le interesa la parte de XML del proyecto q estoy haciendo, pidanmelo y se los dare. Quizas, si yo veia esto q estoy ofreciendo ahora una o dos semanas atras, realmente me interesaria.
La idea es escribir un mini tutorial del uso de esta libreria, aplicado a mi caso en particular, pero el problema es q no tengo mucho tiempo. Tambien quisiera escribir algo de como conectarse a Interbase desde JAVA. Si a alguien le interesa, insisto, diganmelo. No sere un crack en esto, pero puede ser muy util.
Les aclaro de antemano q uso C++ y no C, o sea, todo es OOP en mi proyecto aunque la libxml2 este escrita en C.
Salu2!!!! nuevamente :hola: