Salve a tutti.
Per fare i primi passi nella programmazione a oggetti e nell'xml ho deciso di fare un piccolo form che permetta di inserire ricette e poi le vada a salvare in un file xml.
Ho due problemi:
1) Se aggiungo alcuni caratteri speciali, l'xml mi da errore. Sembra riconoscere < e &, ma non à, ì,...
Ho letto in una guuida sul codice ben formattato di html.it (http://www.html.it/xml/guida/guida_xml_05.htm)
"
Ad esempio, la seguente direttiva di elaborazione:
<?xml version="1.0" encoding="iso-8859-1"?>
abilita l’uso del set di caratteri noto come Latin 1 contenente le lettere accentate ed altri simboli.
"
ma l'errore me lo da comunque.
2) Per passare dal mio file xml ad un "array" di oggetti utilizzo una funzione che ho trovato nel manuale di php. Il mio problema è che volevo mettere un'attributo al "marcatore" ricetta e vorrei che tale attributo diventasse la chiave di quell'oggetto ricetta nel mio array. Come faccio a leggere l'attributo?
Vi faccio vedere il codice che forse è più chiaro:
Esempio del file xml
codice:
<?xml version="1.0" encoding="iso-8859-1"?>
<ricettario>
<ricetta id="11">
<codice>0012</codice>
<nome>proívab dgj</nome>
<tipologia>fmds</tipologia>
<ingredienti>kdslf>ssasda</ingredienti>
</ricetta>
<ricetta id="12">
...
</ricetta>
</ricettario>
Funzione che mi trasforma il mio file xml in un "array" di oggetti:
codice:
function readDatabase($filename)
{
// read the XML database of aminoacids
$data = implode("", file($filename));
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $data, $values, $tags);
xml_parser_free($parser);
// loop through the structures
foreach ($tags as $key=>$val) {
if ($key == "ricetta") {
$molranges = $val;
// each contiguous pair of array entries are the
// lower and upper range for each molecule definition
for ($i=0; $i < count($molranges); $i+=2) {
$offset = $molranges[$i] + 1;
$len = $molranges[$i + 1] - $offset;
$tdb[] = parseMol(array_slice($values, $offset, $len));
}
} else {
continue;
}
}
return $tdb;
}
function parseMol($mvalues)
{
for ($i=0; $i < count($mvalues); $i++) {
$mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"];
}
return new Ricetta($mol);
}
Mi sono persa in un bicchiere d'acqua?