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&iacute;vab dgj</nome>
		<tipologia>fmds</tipologia>
		<ingredienti>kdslf&gt;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?