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?