Pues la pregunta la rehago de la siguiente forma:
¿Creeis que es o seria de utilidad una especie de biblioteca de funciones para manejar lenguajes de marcas tipo XML en GP32??
Ya le comente el tema una vez a Chui y ahora que tengo casi terminada una version preliminar (la he hecho por hobby) me gustaria saber si seria realmente util para alguien. Si alguien la considerara util me plantearia publicarla, si no no tiene sentido hacerlo.
Tengo que decir que he seguido una politica bastante "estraña" a la hora de programarla, he hecho una "simulacion" de COM. Cuando digo extraña me refiero a lo siguiente, un ejemplo de una funcion que genera un documento XML utilizandola:
int HacerDoc (void)
{
int i;
char text[20];
IMLProcessInstruction ppi=NULL, ppi_tmp=NULL;
IMLElement pe=NULL, pe2=NULL, pe_tmp=NULL;
IMLAttribute pa=NULL;
IMLText pt=NULL;
IMLNode pn=NULL,pn1=NULL;
/*Creamos un documento ML*/
DocumentFromCOM (IID_IMLDocument,&doc);
/*Creamos una instruccion de proceso y le damos nombre*/
doc->CreateProcessInstruction(doc,IID_IMLProcessInstru ction,&ppi);
ppi->SetName(ppi,"xml");
/*Creamos un atributo, le damos nombre, le añadimos un dato y se lo añadimos a la instruccion de proceso*/
doc->CreateAttribute(doc,IID_IMLAttribute,&pa);
pa->SetName(pa,"version");
pa->SetData(pa,strlen("1.0")*sizeof(char),(void*)"1.0 ");
ppi->SetAttribute(ppi,pa);
/*Ahora añadimos la instruccion de proceso al documento*/
doc->AppendProcessInstruction(doc,ppi,&ppi_tmp);
/*Liberamos las interfaces para poder utilizarlas en otras operaciones*/
if (pa) pa->Release(pa);
if (ppi!=NULL) ppi->Release(ppi);
if (ppi_tmp!=NULL) ppi_tmp->Release(ppi_tmp);
doc->CreateText(doc,IID_IMLText,&pt);
pt->SetData(pt,strlen("\n")*sizeof(char),(void*)"\n") ;
pt->QueryInterface(pt,IID_IMLNode,(void **)&pn);
doc->AppendChild(doc,pn,&pn1);
if (pn1) pn1->Release(pn1);
/*Creamos un elemento y le damos nombre*/
doc->CreateElement(doc,IID_IMLElement,&pe);
pe->SetName(pe,"raiz");
/*Creamos un atributo, le damos nombre, le añadimos un dato y se lo añadimos al elemento*/
doc->CreateAttribute(doc,IID_IMLAttribute,&pa);
pa->SetName(pa,"autor");
pa->SetData(pa,strlen("Mortimor"),"Mortimor");
pe->SetAttribute(pe,pa);
pa->Release(pa);
pt->SetData(pt,strlen("\n ")*sizeof(char),(void*)"\n ");
for (i=0;i<5;i++)
{
pe->AppendChild(pe,pn,&pn1);
if (pn1) pn1->Release(pn1);
doc->CreateElement(doc,IID_IMLElement,&pe2);
sprintf(text,"subelemento%d",i);
pe2->SetName(pe2,text);
pe->AppendElement(pe,pe2,&pe_tmp);
pe2->Release(pe2);
pe_tmp->Release(pe_tmp);
}
pt->SetData(pt,strlen("\n")*sizeof(char),(void*)"\n") ;
pe->AppendChild(pe,pn,&pn1);
if (pn1) pn1->Release(pn1);
if (pn) pn->Release(pn);
if (pt) pt->Release(pt);
/*Ahora añadimos elemento al documento*/
doc->AppendElement(doc,pe,&pe_tmp);
/*Liberamos las interfaces para poder utilizarlas en otras operaciones*/
pe->Release(pe);
pe_tmp->Release(pe_tmp);
return 0;
}
Por cierto: doc es una interfaz IMLDocument.
Por favor, que las criticas sean constructivas. Si a alguien le parece una estupidez hacer algo como esto... decirlo, que ****.
Marcadores