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