Tool per la gestione degli XML in modo rapido, lettura e scrittura.
/ehtool/xmlDoc.c
xmlParse.c è una prima versione limitata che non lavora con i nodi.
xmlDoc.c è molto più veloce e permettere di operare meglio sui nodi e di modificarli.
Per tenere la compatibilità con il vecchio codice le funzioni sono state rinominate con una doppia x.
E' possibile quindi usare xmlDoc insieme a xmlParser, cambiando (se non si vuole rifare) le funzioni del vecchio codice con quelle xx (vedi xmlParser.h: es. xxmlDoc(), xxmlArrayFree(), xxmlGetAttrib() ecc.)
Macro
- XMLD
Documento
- XMLPTR
Puntatore ad un elemento (nodo)
- XMLARRAY
array di nodi
Esempio
void currencyUpdate(void)
{
XMLD * pxDoc;
SQL_RS rsSet;
EH_WEB *psWeb;
EH_LST lst;
EH_LST lstJava;
CHAR * psz;
double dDollarEur=0;
psWeb=webHttpReq("https://www.ecb.europa.eu/stats/eurofxref/eurofxref-daily.xml","GET",NULL,FALSE,0,0);
if (!psWeb->sError.enCode) {
INT a;
XMLARRAY arxCube;
pxDoc=xmlOpen(psWeb->pData,1,true);
arxCube=xmlArrayAlloc(pxDoc,xmlGetd(pxDoc,NULL,"Envelope.Cube.Cube"),true,NULL);
for (a=0;arxCube[a];a++) {
CHAR * lpCurrency=xmlGetAttrib(arxCube[a],"currency");
CHAR * lpRate=xmlGetAttrib(arxCube[a],"rate");
if (!strcmp(lpCurrency,"USD")) dDollarEur=atof(lpRate);
sql_query("UPDATE currencies SET cambio=%f,tsUpd=NOW() WHERE code='%s'",atof(lpRate),lpCurrency);
}
xmlArrayFree(arxCube);
xmlClose(pxDoc,false);
printf("Aggiornamento BCE ok." CRLF);
}
else
{
ehLogWrite("Aggiornamento valute: errore %d:%s",psWeb->sError.enCode,psWeb->sError.szDesc);
}
webHttpReqFree(psWeb);