xml_parse_into_struct
XML veriyi çözümleyip sonucu bir dizi içinde döndürür
&reftitle.description;
intxml_parse_into_struct
XMLParserçözümleyici
stringveri
arraydeğerler
arrayindis&null;
Bu işlev bir XML belgeyi iki diziye çözümler. indis
dizisi, değerler dizisindeki değerlerin konumlarına
birer gösterici içerir. Bu dizilerin işleve gönderimli aktarılmaları
gerekir.
&reftitle.parameters;
çözümleyici
XMLParser nesnesi.
veri
XML veriyi içeren dizi.
değerler
XML verinin değerlerini içeren dizi.
indis
$değerler içindeki uygun değerlerin konumlarına göstericiler içeren
bir dizi.
&reftitle.returnvalues;
Başarısızlık durumunda 0, başarı durumunda 1 döner. Bu, &false; ve &true;
olarak ele alınmamalıdır. Dönen değeri === işleci ile karşılaştırın.
&reftitle.changelog;
&Version;
&Description;
&xml.changelog.parser-param;
&reftitle.examples;
Aşağıdaki örnekte dönen dizilerin iç yapısı gösterilmiştir. Basit olarak,
para etiketi içine note etiketini
gömüp, bunu çözümledikten sonra üretilen dizileri dökümlüyoruz.
- xml_parse_into_struct örneği
basit örnek";
$p = xml_parser_create();
xml_parse_into_struct($p, $simple, $vals, $index);
xml_parser_free($p);
echo "İndis dizisi\n";
print_r($index);
echo "\nDeğerler dizisi\n";
print_r($vals);
?>
]]>
Çıktı şöyle olur:
Array
(
[0] => 0
[1] => 2
)
[NOTE] => Array
(
[0] => 1
)
)
Değerler dizisi
Array
(
[0] => Array
(
[tag] => PARA
[type] => open
[level] => 1
)
[1] => Array
(
[tag] => NOTE
[type] => complete
[level] => 2
[value] => basit örnek
)
[2] => Array
(
[tag] => PARA
[type] => close
[level] => 1
)
)
]]>
Olaylarla tetiklenen çözümleme (expat kütüphanesine dayalı olarak) XML
belgenin karmaşıklığına bağlı olarak karmaşıklaşabilir. Bu işlev DOM tarzı
bir nesne üretmez fakat bir ağaç halinde uygun bir yapı üretir. Bu
bakımdan, XML belge içindeki veriyi gösteren nesneler kolayca
oluşturulabilir. Amino asitlerden oluşan küçük bir veritabanı olarak
aşağıdaki XML belgeyi ele alalım:
- moldb.xml - küçük bir moleküler bilgi veritabanı
Alanine
ala
A
hydrophobic
Lysine
lys
K
charged
]]>
Bu belgeyi çözümleyip uygun nesneleri üretecek kod:
- parsemoldb.php - moldb.xml dosyasını bir moleküler nesne dizisine
çözümler
$v)
$this->$k = $aa[$k];
}
}
function readDatabase($filename)
{
// amino asit veritabanını okuyalım
$data = file_get_contents($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);
// dizileri açalım
foreach ($tags as $key=>$val) {
if ($key == "molecule") {
$molranges = $val;
// Dizi girdilerindeki her devamlı dizi çifti
// bir molekülün alt ve üst aralıklarını tanımlar
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 "** Amino Asit Nesneleri Veritabanı:\n";
print_r($db);
?>
]]>
parsemoldb.php betiği çalıştırılınca,
$db dizisi Amino asit nesnelerinden oluşturulmuş olur.
Betiğin çıktısı şöyle olur:
aminoacid Object
(
[name] => Alanine
[symbol] => ala
[code] => A
[type] => hydrophobic
)
[1] => aminoacid Object
(
[name] => Lysine
[symbol] => lys
[code] => K
[type] => charged
)
)
]]>