PHP kézikönyv
Előző
Következő
Ez a függvény az XML fájlt 2 párhuzamos tömbbe rendezi, ezek közül az egyik, az index mutatókat tartalmaz a másik, a values elemeire.
Ezeket a paramétereket referencia szerint kell átadni a függvény számára.
Megjegyzés:
Az index tömb az XML elemek nyitó és záró tag-jeit tartalmazza az elemzés időrendiségében, azaz adott elemhez tartozó címkék (tag-ek) nem feltétlenül egymás után, héjszerűen (egymásba ágyazva) szerepelnek.
Az index tömb kulcsai a megtalált címkék nevei, a hozzájuk tartozó tömbök pedig indexeket tárolnak a values tömbhöz, ahol az adott címkéhez ill. az általa jelölt elemhez tartozó részletes információkat lehet megtalálni.
Az alábbi példa megvilágítja ezeknek a függvény által visszaadott tömböknek a belső felépítését és kapcsolataikat egymással.
Ebben az egyszerű példában a para elem egy note elemet foglal magában:
$xml = "para note egyszerű kis megjegyzés / note / para"; $parser = xml_parser_create(); xml_parse_into_struct($parser, $xml, $ertek, $index); xml_parser_free($parser); echo "indexek\n"; print_r($index); echo "\nertekek\n"; print_r($ertek);
indexek Array ([PARA] = Array ([0] = 0 [1] = 2) [NOTE] = Array ([0] = 1)) ertekek Array ([0] = Array ([tag] = PARA [type] = open [level] = 1) [1] = Array ([tag] = NOTE [type] = complete [level] = 2 [value] = egyszerű kis megjegyzés) [2] = Array ([tag] = PARA [type] = close [level] = 1))
Az epxat könyvtáron alapuló eseményvezérelt elemzés bonyolult lehet, ha az XML dokumentumnak összetett a szerkezete.
Ez a függvény nem DOM stílusú objektumhierarchiát állít elő az elemzést követően, de olyan könnyen kezelhető szerkezetet ad, amit faszerűen fel lehet dolgozni.
Ekképpen, könnyen lehet az XML-t ábrázoló objektumokat létrehozni.
Vegyük példaként a következő XML állományt, amely az aminosavak kis információs adatbázisa:
Példa 1. moldb.xml - molekuláris adatok adatbázisa
?xml version=" 1.0 "? moldb molecule name Alanine / name symbol ala / symbol code A / code type víztaszító? / type / molecule molecule name Lysine / name symbol lys / symbol code K / code type telített / type / molecule / moldb
Példa 2. parsemoldb.php - beolvassa a moldb.xml-t
?php class AminoAcid {var $name; / / animosav neve var $symbol; / / 3betűs rövidítés var $code; / / 1betűs kód var $type; / / víztaszító, telített vagy semleges function AminoAcid ($aa) {foreach ($aa as $k= $v) $this - $k = $aa[$k];}} function readDatabase($filename) {/ / beolvassa az aminosavak XML adatbázisát $adat = 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,$adat,$ertekek,$tagek); xml_parser_free($parser); / / végighalad a tömbökön foreach ($tagek as $key = $val) {if ($key == "molecule") {$molranges = $val; / / minden egymással határos tömbbejegyzés-pár a molekula / / definicójának alsó és felső határa for ($i=0; $i count($molranges); $i+=2) {$offset = $molranges[$i] + 1; $len = $molranges[$i + 1] - $offset; $tdb[] = parseMol(array_slice($ertekek, $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 "** Aminosavak adatbázisa:\n"; print_r($db);?
** Aminosavak adatbázisa:
Array ([0] = aminoacid Object ([name] = Alanine [symbol] = ala [code] = A [type] = víztaszító) [1] = aminoacid Object ([name] = Lysine [symbol] = lys [code] = K [type] = telített))
Előző
Tartalom
Következő
Fel