codice:
<?xml version="1.0" standalone="no"?>
<refresh lup="1240330152" time="20">
<index cat="0" fla="ITA" nam="SPMIB" tit="S&P/MIB" var="-0.24%" val="17688.000" lis="1" rtm="1" mar="0" />
<index cat="0" fla="ITA" nam="MIBTEL" tit="MIBTEL" var="-0.05%" val="14045.000" lis="0" rtm="0" mar="0" />
</refresh>
Salve,

quello che vedete sopra è un file xml che dovrei convertire in formato binario per salvare spazio dato che i tags e i nomi degli attributi del

file stesso occupano spazio...quindi ho bisogno di ottimizare spazio perchè quando ho migliaia di <index> il file inizia a pesare parecchio.

vi spiego bene gli attributi: LUP (last update) è il timestamp di unix, TIME è un valore di refresh che può andare da 0 a 255

CAT può andare da 0 a 255, FLA lo cambierò in integer (sta ad idicare il paese ma potrei fare ITA = 0 etc...)

NAM è una serie di caratteri massima lunghezza 255 chars lo stesso vale per TIT. VAR sta ad indicare la variazione e sebbene sia un valore numerico

lo potrei lasciare in modalità chars. VAL lo vorrei portare in double. LIS,RTM e MAR sono 0 o 1.

all'inizio avevo pensato di fare una cosa tipo molto semplice tipo:

KEYxxVALUE

KEY: chiave di lughezza fissa 3 chars
x: 1 byte per descrivere la lunghezza di value
x: 1 byte per descrivere il TIPO di value
VALUE: valore della chiave

in questo modo quando devo parsare la struttura (unpack) è molto semplice dati che i due bytes tra key e value mi aiutano a capire che dati sono e

quanto devo leggere dal buffer...mi domando però come posso creare un array tipo:

$riga{1}{KEY1} = VALUE1
$riga{1}{KEY2} = VALUE2
...etc...

$riga{2}{KEY1} = VALUE1
$riga{2}{KEY2} = VALUE2
...etc...

come seconda scelta avevo optato di fare una cosa del genere:

dove "x" è un byte:

tag refresh:

"xxxxxxxx" (8 bytes per rappresentare LUP)
"x" (1 bytes per rappresentare TIME)

tags index:

"x" (1 bytes 0/255 per rappresentare quanto bytes devo leggere con il buffer percompletare un rigo, index)
"x" (MAR 0/1)
"x" (LIS 0/1)
"x" (RTM 0/1)
"x" (CAT 0/1)
"x" (FLA 0/1)
"xxxxxxxx" (8 bytes per rappresentare VAL, double)
"x" (NAM lunghezza del prossimo valore 0/255)
"value"
"x" (TIT lunghezza del prossimo valore 0/255)
"value"
"x" (VAR lunghezza del prossimo valore 0/255)
"value"

avete qualche suggerimento?