[MODULE] GMXEXT_mod_xml
-
brujoMX
- Posts: 321
- Joined: Thu Jan 12, 2012 9:10 pm
[MODULE] GMXEXT_mod_xml
Saludos chicos, traigo una nueva version del modulo que permite trabajar con ficheros xml. He reescrito el codigo, ahora es mas eficiente y facil de usar.
Ya no creo agregar nuevas funciones, solo corregire los bugs que surjan y tratare de compilar la version para Linux y Mac ,pues estoy interesado en otros modulos.
Ojala puedan probarla y reportarme los problemas que detecten.
GMXEXT_mod_xml v1.0.0
+ Añadida la constante XML_ALL_DOCUMENTS
Para usarse con la funcion XML_Unload, asi descargaremos todos los archivos previamente cargados.
+ Añadida funcion XML_CloneElement
Ya no creo agregar nuevas funciones, solo corregire los bugs que surjan y tratare de compilar la version para Linux y Mac ,pues estoy interesado en otros modulos.
Ojala puedan probarla y reportarme los problemas que detecten.
GMXEXT_mod_xml v1.0.0
+ Añadida la constante XML_ALL_DOCUMENTS
Para usarse con la funcion XML_Unload, asi descargaremos todos los archivos previamente cargados.
+ Añadida funcion XML_CloneElement
You do not have the required permissions to view the files attached to this post.
Last edited by brujoMX on Wed Sep 11, 2013 2:09 am, edited 6 times in total.
- erkosone
- Posts: 10656
- Joined: Tue Feb 24, 2009 2:13 pm
- Location: Barcelona.
- Contact:
Re: [MODULE] GMXEXT_mod_xml beta
Interesante, una pregunta, el modulo deja crear nuevos elementos? nuevos campos? eliminar elementos y campos?
Esto viene bien para muchas cosas.
Esto viene bien para muchas cosas.
http://iphonegamesdev.com/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
[GEMIX - VIDEO TUTORIALES] http://www.youtube.com/user/fasetconasa
http://gurugameprogramming.blogspot.com.es/
-
brujoMX
- Posts: 321
- Joined: Thu Jan 12, 2012 9:10 pm
Re: [MODULE] GMXEXT_mod_xml beta
Hola erkosone en eso estoy, ahora las funciones que tiene son de lectura de campos y escritura pero solo en memoria.
-
brujoMX
- Posts: 321
- Joined: Thu Jan 12, 2012 9:10 pm
Re: [MODULE] GMXEXT_mod_xml beta
Hola, he agregado muchas funciones, pero me tope con un problema que no se como resolver de forma adecuada.
Pasa lo siguiente:
si tenemos un xml asi:
para llegar al tag message, uso lo siguiente:
si de ahi yo quiero borrar el tag "es" hago esto:
y funciona bien, lo borrar y guarda en disco y todo lindo, el problema es que el tag "es" esta repetido, que pasa si yo quiero borrar el segundo tag "es" y no el primero ?
No se me ocurre una forma elegante de hacerlo, habia pensado en usar algo como:
Asi el "@2" indicaria que queremos borrar el segundo tag que coincida con la cadena "es", o agregar un tercer parametro:
Pero no se, alomejor tengo mal planteado el uso de paths, para obtener los elementos.
Alguna sugerencia??
Saludos!
Pasa lo siguiente:
si tenemos un xml asi:
Code: Select all
<?xml version="1.0" ?>
<MyGame>
<resolution width="320" height="240" bpp="8"/>
<message>
<es>Hola mundo!!!</es>
<en>Hello world!!!</en>
<it>italiano</it>
<es>espanol</es>
</message>
</MyGame>
Code: Select all
XMLElement e;
.......
.......
XML_GetElement(&e, "MyGame.message");
Code: Select all
XML_DeleteSon(&e, "es");
.....
.....
XML_SaveFile("copy.xml");
No se me ocurre una forma elegante de hacerlo, habia pensado en usar algo como:
Code: Select all
XML_DeleteSon(&e, "es@2");
Code: Select all
XML_DeleteSon(&e, "es", 2);
Alguna sugerencia??
Saludos!
- g1tp111ricard8
- Posts: 696
- Joined: Tue Dec 02, 2008 7:47 pm
- Location: InteractiveStation
- Contact:
Re: [MODULE] GMXEXT_mod_xml beta
[quote="brujoMX"]Hola, he agregado muchas funciones, pero me tope con un problema que no se como resolver de forma adecuada.
Pasa lo siguiente:
si tenemos un xml asi:
Para esta parte, seria bueno que usaras los atributos, para diferenciar del primer tag <es> del segundo. Por ejemplo:
O separar los mensajes por su categoria. Por ejemplo:
Con esto, ya puedes buscar de una manera mas facil un elemento, sin tener que recurrir a hacer codigos de mas.
Saludos...
Pasa lo siguiente:
si tenemos un xml asi:
Code: Select all
<?xml version="1.0" ?>
<MyGame>
<resolution width="320" height="240" bpp="8"/>
<message>
<es>Hola mundo!!!</es>
<en>Hello world!!!</en>
<it>italiano</it>
<es>espanol</es>
</message>
</MyGame>
Code: Select all
<?xml version="1.0" ?>
<MyGame>
<resolution width="320" height="240" bpp="8"/>
<message>
<es category="grettings">Hola mundo!!!</es>
<en category="grettings">Hello world!!!</en>
<it category="language">italiano</it>
<es category="language">espanol</es>
</message>
</MyGame>
Code: Select all
<?xml version="1.0" ?>
<MyGame>
<resolution width="320" height="240" bpp="8"/>
<message category="es">
<grettings>Hola mundo!!!</grettings>
<language>espanol</language>
</message>
<message category="en">
<grettings>Hello world!!!</grettings>
</message>
<message category="it">
<language>italiano</language>
</message>
</MyGame>
Saludos...
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: [MODULE] GMXEXT_mod_xml beta
Hola brujoMX,
Primero felicidades por el modulo, muy buen aporte.
Sobre el problema, aun no he mirado mucho el tema XML, lo que puedo dar como sugerencia es respecto a lo que habeis mencionado.
1 - La solucion de ricard8 me parece la mejor si se utilizan atributos.
2 - Si no se utilizan atributos, la solucion mejor seria utilizar el 3° parametro, porque eso minimiza la lectura de la cadena del segundo, mejorando la velicidad interna de ejecucion de la funcion.
Primero felicidades por el modulo, muy buen aporte.
Sobre el problema, aun no he mirado mucho el tema XML, lo que puedo dar como sugerencia es respecto a lo que habeis mencionado.
1 - La solucion de ricard8 me parece la mejor si se utilizan atributos.
2 - Si no se utilizan atributos, la solucion mejor seria utilizar el 3° parametro, porque eso minimiza la lectura de la cadena del segundo, mejorando la velicidad interna de ejecucion de la funcion.
-
brujoMX
- Posts: 321
- Joined: Thu Jan 12, 2012 9:10 pm
Re: [MODULE] GMXEXT_mod_xml beta
Edite el hilo principal con una nueva beta, ojala puedan testearlo, aun tiene el problema de elementos con el mismo nombre.
Saludos!
Saludos!
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: [MODULE] GMXEXT_mod_xml beta
Hola brujoMX,
He probado la lib y parece funcionar bien, te voy a dar mis sugerencias para la implementacion que quieres mejorar.
- XML_LoadFile: Para que permita mas ficheros XML cargados te recomiendo utilizar un sistema de array dinamicos, en principio se alocaria un espacio suficiente, quizas para cargarne 16 que luego puede ser aumentado segun que valor tiene el contador interno de numero de fichero cargados (el limite lo estableces tu).
La funcion debe devolver 0, si el fichero no se pudo cargar, sino un ID de 1 adelante.
Te recomiendo tambien reusar slots, cuando descargas un fichero, el ID vuelve a ser disponible para el siguiente LOAD.
- XML_NoSon, seria mejor XML_HasSon.
- XML_DeleteSon, mejor que tenga 2 overloads:
* INT XML_DeleteSon(XMLElement *e)
* INT XML_DeleteSon(XMLElement *e, STRING son_name)
El primero puede aceptar el ID del elemento o la constante XML_ALL_ELEMENT.
Si se le pasa el ID, elimina el elemento y todos sus hijos, si se le pasa XML_ALL_ELEMENT, elimina todos los elementos y todos sus hijos correspondientes.
El segundo acepta tambien ID del elemento o la constante XML_ALL_ELEMENT.
Si se le pasa el ID, elimina el elemento y su hijo correspondiente a son_name, si se le pasa XML_ALL_ELEMENT, elimina todos los elementos y todos sus hijos correspondientes a son_name.
- XML_DeleteAllSons, se puede eliminar, tenido la funcion anterior ya no hace mas falta esta.
Lo demas tal cual lo tienes creo que de momiento esta bien.
He probado la lib y parece funcionar bien, te voy a dar mis sugerencias para la implementacion que quieres mejorar.
- XML_LoadFile: Para que permita mas ficheros XML cargados te recomiendo utilizar un sistema de array dinamicos, en principio se alocaria un espacio suficiente, quizas para cargarne 16 que luego puede ser aumentado segun que valor tiene el contador interno de numero de fichero cargados (el limite lo estableces tu).
La funcion debe devolver 0, si el fichero no se pudo cargar, sino un ID de 1 adelante.
Te recomiendo tambien reusar slots, cuando descargas un fichero, el ID vuelve a ser disponible para el siguiente LOAD.
- XML_NoSon, seria mejor XML_HasSon.
- XML_DeleteSon, mejor que tenga 2 overloads:
* INT XML_DeleteSon(XMLElement *e)
* INT XML_DeleteSon(XMLElement *e, STRING son_name)
El primero puede aceptar el ID del elemento o la constante XML_ALL_ELEMENT.
Si se le pasa el ID, elimina el elemento y todos sus hijos, si se le pasa XML_ALL_ELEMENT, elimina todos los elementos y todos sus hijos correspondientes.
El segundo acepta tambien ID del elemento o la constante XML_ALL_ELEMENT.
Si se le pasa el ID, elimina el elemento y su hijo correspondiente a son_name, si se le pasa XML_ALL_ELEMENT, elimina todos los elementos y todos sus hijos correspondientes a son_name.
- XML_DeleteAllSons, se puede eliminar, tenido la funcion anterior ya no hace mas falta esta.
Lo demas tal cual lo tienes creo que de momiento esta bien.
-
brujoMX
- Posts: 321
- Joined: Thu Jan 12, 2012 9:10 pm
Re: [MODULE] GMXEXT_mod_xml beta
Muchas gracias por las sugrencias CicTec, tengo una pregunta.
Estoy reescribiendo algunas cosas, como la posibilidad de cargar mas de un fichero, pero me surgio una duda a la hora de elegir la estructura de datos adecuada.
me recomiendas usar STL o me monto un sistema propio?
Estoy reescribiendo algunas cosas, como la posibilidad de cargar mas de un fichero, pero me surgio una duda a la hora de elegir la estructura de datos adecuada.
me recomiendas usar STL o me monto un sistema propio?
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: [MODULE] GMXEXT_mod_xml beta
De nada. 
No no, olvida STL, solo relentiza, montate un simple sistema de array dinamicos proprio, es mas que suficiente.
Sobre el sistema de carga multificheros, hay que tener en cuenta de lo siguiente:
- Las funciones actuales, trabajan en los elementos del fichero cargado, con lo cual:
- O cambias la signature de las funciones para que acepten un parametro "xml_id" que identifica el fichero.
- O necesitas cambiar la funcion "XML_GetElement(XMLElement *e, STRING path)", para que sea del tipo "XML_GetElement(INT xml_id, XMLElement *e, STRING path), para que te devuelva el elemento del particular fichero.
No no, olvida STL, solo relentiza, montate un simple sistema de array dinamicos proprio, es mas que suficiente.
Sobre el sistema de carga multificheros, hay que tener en cuenta de lo siguiente:
- Las funciones actuales, trabajan en los elementos del fichero cargado, con lo cual:
- O cambias la signature de las funciones para que acepten un parametro "xml_id" que identifica el fichero.
- O necesitas cambiar la funcion "XML_GetElement(XMLElement *e, STRING path)", para que sea del tipo "XML_GetElement(INT xml_id, XMLElement *e, STRING path), para que te devuelva el elemento del particular fichero.