[MODULE] GMXEXT_mod_xml

Extensiones oficiales y no para expander el lenguaje Gemix.

[MODULE] GMXEXT_mod_xml

Postby brujoMX » Thu Aug 15, 2013 12:17 pm

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

GMXEXT_mod_xml.rar
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.
brujoMX
 
Posts: 321
Joined: Thu Jan 12, 2012 9:10 pm

Re: [MODULE] GMXEXT_mod_xml beta

Postby erkosone » Thu Aug 15, 2013 3:05 pm

Interesante, una pregunta, el modulo deja crear nuevos elementos? nuevos campos? eliminar elementos y campos?
Esto viene bien para muchas cosas.
User avatar
erkosone
 
Posts: 10176
Joined: Tue Feb 24, 2009 2:13 pm
Location: Barcelona.

Re: [MODULE] GMXEXT_mod_xml beta

Postby brujoMX » Thu Aug 15, 2013 6:17 pm

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

Postby brujoMX » Tue Aug 20, 2013 2:08 pm

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:
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>


para llegar al tag message, uso lo siguiente:

Code: Select all
XMLElement e;
.......
.......
XML_GetElement(&e, "MyGame.message");


si de ahi yo quiero borrar el tag "es" hago esto:

Code: Select all
XML_DeleteSon(&e, "es");
.....
.....
XML_SaveFile("copy.xml");


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:

Code: Select all
XML_DeleteSon(&e, "es@2");


Asi el "@2" indicaria que queremos borrar el segundo tag que coincida con la cadena "es", o agregar un tercer parametro:

Code: Select all
XML_DeleteSon(&e, "es", 2);


Pero no se, alomejor tengo mal planteado el uso de paths, para obtener los elementos.

Alguna sugerencia??

Saludos!
brujoMX
 
Posts: 321
Joined: Thu Jan 12, 2012 9:10 pm

Re: [MODULE] GMXEXT_mod_xml beta

Postby g1tp111ricard8 » Tue Aug 20, 2013 2:46 pm

[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:
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>


Para esta parte, seria bueno que usaras los atributos, para diferenciar del primer tag <es> del segundo. Por ejemplo:

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>


O separar los mensajes por su categoria. Por ejemplo:

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>


Con esto, ya puedes buscar de una manera mas facil un elemento, sin tener que recurrir a hacer codigos de mas.

Saludos...
User avatar
g1tp111ricard8
 
Posts: 694
Joined: Tue Dec 02, 2008 7:47 pm
Location: InteractiveStation

Re: [MODULE] GMXEXT_mod_xml beta

Postby CicTec » Tue Aug 20, 2013 3:21 pm

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.
User avatar
CicTec
 
Posts: 15819
Joined: Thu Jul 31, 2008 10:18 pm

Re: [MODULE] GMXEXT_mod_xml beta

Postby brujoMX » Tue Aug 20, 2013 10:59 pm

Edite el hilo principal con una nueva beta, ojala puedan testearlo, aun tiene el problema de elementos con el mismo nombre.

Saludos!
brujoMX
 
Posts: 321
Joined: Thu Jan 12, 2012 9:10 pm

Re: [MODULE] GMXEXT_mod_xml beta

Postby CicTec » Wed Aug 21, 2013 9:41 am

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.
User avatar
CicTec
 
Posts: 15819
Joined: Thu Jul 31, 2008 10:18 pm

Re: [MODULE] GMXEXT_mod_xml beta

Postby brujoMX » Thu Aug 22, 2013 7:57 am

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?
brujoMX
 
Posts: 321
Joined: Thu Jan 12, 2012 9:10 pm

Re: [MODULE] GMXEXT_mod_xml beta

Postby CicTec » Thu Aug 22, 2013 8:33 am

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.
User avatar
CicTec
 
Posts: 15819
Joined: Thu Jul 31, 2008 10:18 pm

Next

Return to Extensiones Gemix

Who is online

Users browsing this forum: No registered users and 1 guest