[MODULE] GMXEXT_mod_xml

Extensiones oficiales y no para expander el lenguaje Gemix.

Re: [MODULE] GMXEXT_mod_xml beta

Postby CicTec » Tue Aug 27, 2013 10:55 pm

De nada. ;)
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: [MODULE] GMXEXT_mod_xml beta

Postby brujoMX » Wed Aug 28, 2013 12:09 am

para las funciones

INT XML_GetAttribute(XMLElement *e, STRING attribute, INT *v)
INT XML_GetAttribute(XMLElement *e, STRING attribute, FLOAT *v)
INT XML_GetAttribute(XMLElement *e, STRING attribute, STRING *v)

te parece bien que las deje asi con sus overloads o seria mejor hacer algo como:

INT XML_GetIntAttribute(XMLElement *e, STRING attribute)
FLOAT XML_GetFloatAttribute(XMLElement *e, STRING attribute)
STRING XML_GetStringAttribute(XMLElement *e, STRING attribute)
brujoMX
 
Posts: 321
Joined: Thu Jan 12, 2012 9:10 pm

Re: [MODULE] GMXEXT_mod_xml beta

Postby brujoMX » Wed Aug 28, 2013 4:15 am

CicTec wrote:De nada. :)

Pues si ya el elemento tiene el ID del documento al cual pertenece ok, el problema es que si le pasa XML_ALL_ELEMENTS no se sabe a cual documento eliminar todos los elementos, por eso se necesita el parametro "document", sino debes eliminar la opcion XML_ALL_ELEMENTS

Yo haria asi:
INT XML_DeleteSon(INT document, XMLElement *e)
INT XML_DeleteSon(INT document, XMLElement *e, STRING son_name) -> (overload 1)


Con este uso:
Source Code (Gemix) [ Download ] [ Hide ]
  • xml_deleteson(document, eResolution); // elimino todos los hijos del elemento "eResolution" del documento "document"
  • xml_deleteson(document, eResolution, "blabla"); // elimino el hijo "blabla" del elemento "eResolution" del documento "document"
  • xml_deleteson(document, XML_ALL_ELEMENTS); // elimino todos los elementos y hijos del documento "document"
  • xml_deleteson(document, XML_ALL_ELEMENTS, "blabla"); // elimino todos los hijos "blabla" de todos los elementos del documento "document"
  •  


Por cierto, para poder pasar XML_ALL_ELEMENTS al parametro "XMLElement *e", esta debe tener el valor 0, sino el compilador dara error en la llamada, mientra como 0 seria interpretado como si se pasase "null" o un puntero nulo y internamente lo puedes tratar como caso especial.


Si mira, los 2 primeros XML_DeleteSon no necesitan pasar el document, pues ya va incluido en el elemento que se le pasa por parametro.
Las otras 2 overloads las voy a implementar muchas gracias por la sugerencia, solo que no entendi nada eso que me dijiste de la constante XML_ALL_ELEMENTS, me puedes explicar con un poco mas de detalle?
brujoMX
 
Posts: 321
Joined: Thu Jan 12, 2012 9:10 pm

Re: [MODULE] GMXEXT_mod_xml beta

Postby CicTec » Wed Aug 28, 2013 9:02 am

brujoMX wrote:para las funciones

INT XML_GetAttribute(XMLElement *e, STRING attribute, INT *v)
INT XML_GetAttribute(XMLElement *e, STRING attribute, FLOAT *v)
INT XML_GetAttribute(XMLElement *e, STRING attribute, STRING *v)

te parece bien que las deje asi con sus overloads o seria mejor hacer algo como:

INT XML_GetIntAttribute(XMLElement *e, STRING attribute)
FLOAT XML_GetFloatAttribute(XMLElement *e, STRING attribute)
STRING XML_GetStringAttribute(XMLElement *e, STRING attribute)

Yo lo haria asi:
Una nueva funcion:
INT XML_GetAttributeType(XMLElement, STRING attribute_name)
Esta funcion devolveria:
- XML_ERROR (0) en caso de error
- XML_ATTRIBUTE_INT (1) si el attributo es de tipo INT
- XML_ATTRIBUTE_FLOAT (2) si el attributo es de tipo FLOAT
- XML_ATTRIBUTE_STRING (3) si el attributo es de tipo STRING

Y la funcion XML_GetAttribute asi:
INT XML_GetAttribute(XMLElement *e, STRING attribute, INT attribute_type, VOID *v)

Asi podria haber en el programa:
Source Code (Gemix) [ Download ] [ Hide ]
  • attrtype = XML_GetAttributeType(&eActorPosition, "x");
  • XML_GetAttribute(&eActorPosition, "x", attrtype, &var);
  •  

Esto puede ser util si sequieren crear editors para crear o editar XML de terceros, donde no se conocen los tipos de attributos.

Si te parece complicado entonces dejaria asi:
INT XML_GetAttribute(XMLElement *e, STRING attribute, INT *v)
INT XML_GetAttribute(XMLElement *e, STRING attribute, FLOAT *v)
INT XML_GetAttribute(XMLElement *e, STRING attribute, STRING *v)


brujoMX wrote:
CicTec wrote:De nada. :)

Pues si ya el elemento tiene el ID del documento al cual pertenece ok, el problema es que si le pasa XML_ALL_ELEMENTS no se sabe a cual documento eliminar todos los elementos, por eso se necesita el parametro "document", sino debes eliminar la opcion XML_ALL_ELEMENTS

Yo haria asi:
INT XML_DeleteSon(INT document, XMLElement *e)
INT XML_DeleteSon(INT document, XMLElement *e, STRING son_name) -> (overload 1)


Con este uso:
Source Code (Gemix) [ Download ] [ Hide ]
  • xml_deleteson(document, eResolution); // elimino todos los hijos del elemento "eResolution" del documento "document"
  • xml_deleteson(document, eResolution, "blabla"); // elimino el hijo "blabla" del elemento "eResolution" del documento "document"
  • xml_deleteson(document, XML_ALL_ELEMENTS); // elimino todos los elementos y hijos del documento "document"
  • xml_deleteson(document, XML_ALL_ELEMENTS, "blabla"); // elimino todos los hijos "blabla" de todos los elementos del documento "document"
  •  


Por cierto, para poder pasar XML_ALL_ELEMENTS al parametro "XMLElement *e", esta debe tener el valor 0, sino el compilador dara error en la llamada, mientra como 0 seria interpretado como si se pasase "null" o un puntero nulo y internamente lo puedes tratar como caso especial.


Si mira, los 2 primeros XML_DeleteSon no necesitan pasar el document, pues ya va incluido en el elemento que se le pasa por parametro.
Las otras 2 overloads las voy a implementar muchas gracias por la sugerencia, solo que no entendi nada eso que me dijiste de la constante XML_ALL_ELEMENTS, me puedes explicar con un poco mas de detalle?

Si, imagina de tener un XML con varios elementos, el parametro XML_ALL_ELEMENTS permite eliminar todos los elementos (como vaciar el XML vamos).
Si ademas usas la version con el parametro son y tienes un XML con varios elementos que tengan el mismo hijo con el mismo nombre, pues eliminaria todos esos hijos.

El problema de XML_ALL_ELEMENTS es que es una constante, cuando a la funcion pasas un puntero a un dato XMLElement, esto contiene internamente el ID del documento al cual pertenece. Todavia pasando la constante no hay esa informacion disponible, por ende la funcion no sabe a cual documento aplicar la accion (porque puede haber mas documentos cargados). Por esa razon sirve el parametro "INT document", que inclueria en todos los overloads. Viceversa no se podria usar la opcion XML_ALL_ELEMENTS.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: [MODULE] GMXEXT_mod_xml beta

Postby brujoMX » Wed Sep 04, 2013 10:45 pm

Edite el post principal, ojala puedan probarla y les funcione.

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

Re: [MODULE] GMXEXT_mod_xml beta

Postby CicTec » Thu Sep 05, 2013 8:32 pm

Hola brujoMX,

La baje, a ver si a la tarde o mañana la puedo probar y te dare mi opinion.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: [MODULE] GMXEXT_mod_xml

Postby CicTec » Sat Sep 07, 2013 7:29 pm

Hola brujoMX,

Probe la ultima version y parece funcionar bien.

En mi opinion sigue un poco limitado con el tema del manejo de documentos multiples y el manejo de los elementos del mismo, aunque sumariamiente esta bien.

Ahora seria importante el porting a otras plataformas.

Muy buen aporte.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: [MODULE] GMXEXT_mod_xml

Postby brujoMX » Sat Sep 07, 2013 7:45 pm

Hola CicTec, me podrias decir a que te refieres con que esta limitado con el uso de multiples documentos?, pues puedes cargar N documentos sin problemas.

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

Re: [MODULE] GMXEXT_mod_xml

Postby CicTec » Sat Sep 07, 2013 8:02 pm

Digamos que si quieres eliminar los elementos de un documento, debes hacerlo uno a la vez, no puedes por ejemplo hacer toda la operacion con una unica llamada de funcion, o incluso descargar todos los documentos cargardos con una sola llamada.
User avatar
CicTec
 
Posts: 16553
Joined: Thu Jul 31, 2008 10:18 pm

Re: [MODULE] GMXEXT_mod_xml

Postby brujoMX » Sat Sep 07, 2013 8:15 pm

si puedes eliminar todos los elementos del documento con una sola llamada

Code: Select all
root = XML_GetRootElement(document);
XML_DeleteElement(root, XML_ALL_ELEMENTS);

Bueno fueros dos llamadas.
Lo de descargar todos los documentos tienes razon, no hice alguna funcion para eso, la agregare.

Gracias Cictec.
brujoMX
 
Posts: 321
Joined: Thu Jan 12, 2012 9:10 pm

PreviousNext

Return to Extensiones Gemix

Who is online

Users browsing this forum: No registered users and 2 guests