Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Caratteri speciali in xml

    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?

  2. #2
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    1) Se devi usare caratteri accentati o speciali in un xml anzichè scrivere
    codice:
    <ingredienti>kdslf&gt;ssasda</ingredienti>
    scrivi piuttosto
    codice:
    <ingredienti><![CDATA[kdslf>ssasda]]></ingredienti>
    questo comporta che, se usi un funzione php che legge
    direttamente la struttura come se fosse una stringa, devi filtrare
    il contenuto dei dati (<![CDATA[ e ]]>). Se usi invece una trasformazione XSL
    puoi tranquillamente leggere
    il contenuto dei nodi senza dover filtrare nulla

    2) Per questo punto, se sei particolarmente smanettona con gli XSL,
    ti suggerisco di crearne uno che genera un assegnamento
    in php (ad esempio $array = (nodo=>valore....) e poi fai l'eval della trasformazione
    così ottenuta.

    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.