xml_parse_into_struct
Analizza i dati XML in una struttura array
&reftitle.description;
intxml_parse_into_struct
resourceparser
stringdata
arrayvalues
arrayindex
Questa funzione analizza una stringa XML in 2 strutture array parallele,
una (index) contiene i puntatori alla posizione dei
valori opportuni nell'array values. Quest'ultimi
due parametri devono essere passati per riferimento.
&reftitle.parameters;
parser
Un riferimento al parser XML.
data
Una stringa contenente i dati XML.
values
Una array contenente i valori dei dati XML
index
Un array contenente i puntatori alla posizione degli opportuni valori in $values.
&reftitle.returnvalues;
xml_parse_into_struct restituisce 0 per fallimento e 1 per
successo. Questo non è lo stesso di &false; e &true;, fare attenzione con
gli operatori come ===.
&reftitle.examples;
Nell'esempio seguente si illustra la struttura interna degli
array generati da questa funzione. Utilizziamo un semplice
tag note incorporato all'interno di un
tag para, e quindi lo si analizzerà e stamperemo
le strutture generate:
Esempio di uso xml_parse_into_struct
simple note";
$p = xml_parser_create();
xml_parse_into_struct($p, $simple, $vals, $index);
xml_parser_free($p);
echo "Index array\n";
print_r($index);
echo "\nVals array\n";
print_r($vals);
?>
]]>
Eseguendo questo codice si avrà come output:
Array
(
[0] => 0
[1] => 2
)
[NOTE] => Array
(
[0] => 1
)
)
Vals array
Array
(
[0] => Array
(
[tag] => PARA
[type] => open
[level] => 1
)
[1] => Array
(
[tag] => NOTE
[type] => complete
[level] => 2
[value] => simple note
)
[2] => Array
(
[tag] => PARA
[type] => close
[level] => 1
)
)
]]>
Un parsing event-driven (basato sulla libreria expat) può essere
molto complicato se si deve trattare un documento XML complesso.
Questa funzione non produce un oggetto in stile DOM, ma
genera una struttura che permette di essere gestita a modo di
albero. Quindi si possono facilmente creare oggetti rappresentanti i dati
del file XML. Si consideri il seguente file XML rappresentante
un piccolo database di informazioni sugli aminoacidi.
moldb.xml - piccolo database di informazioni sulle molecole
Alanine
ala
A
hydrophobic
Lysine
lys
K
charged
]]>
Un codice per analizzare il documento e generare gli oggetti
appropriati:
parsemoldb.php - analizza moldb.xml in un array di
oggetti molecolari
$v)
$this->$k = $aa[$k];
}
}
function readDatabase($filename)
{
// legge il database XML di amminoacidi
$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);
// cicla attraverso le strutture
foreach ($tags as $key=>$val) {
if ($key == "molecule") {
$molranges = $val;
// ciascuna coppia di elementi contigua dell'array è
// l'intervallo inferiore o superiore per la definizione di ciascuna molecola
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 AminoAcid($mol);
}
$db = readDatabase("moldb.xml");
echo "** Database degli oggetti Aminoacidi:\n";
print_r($db);
?>
]]>
Dopo l'esecuzione di parsemoldb.php, la variabile
$db contiene un array di oggetti
AminoAcid, e ciò viene confermato
dall'output dello script:
aminoacid Object
(
[name] => Alanine
[symbol] => ala
[code] => A
[type] => hydrophobic
)
[1] => aminoacid Object
(
[name] => Lysine
[symbol] => lys
[code] => K
[type] => charged
)
)
]]>