(PHP 4, PHP 5, PHP 7)
xml_parse_into_struct — XML veriyi çözümleyip sonucu bir dizi içinde döndürür
$çözümleyici
, string $veri
, array &$değerler
[, array &$indis
] )
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.
çözümleyici
xml_parser_create() ve xml_parser_create_ns() işlevleri tarafından döndürülen bir XML özkaynağı.
veri
değerler
indis
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.
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.
Örnek 1 - xml_parse_into_struct() örneği
<?php
$simple = "<para><note>basit örnek</note></para>";
$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:
İndis dizisi Array ( [PARA] => 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:
Örnek 2 - moldb.xml - küçük bir moleküler bilgi veritabanı
<?xml version="1.0"?> <moldb> <molecule> <name>Alanine</name> <symbol>ala</symbol> <code>A</code> <type>hydrophobic</type> </molecule> <molecule> <name>Lysine</name> <symbol>lys</symbol> <code>K</code> <type>charged</type> </molecule> </moldb>
Örnek 3 - parsemoldb.php - moldb.xml dosyasını bir moleküler nesne dizisine çözümler
<?php
class AminoAcid {
var $name; // amino asidin ismi
var $symbol; // üç harfli simge
var $code; // tek harflik kod
var $type; // hydrophobic, charged veya neutral
function AminoAcid ($aa)
{
foreach ($aa as $k=>$v)
$this->$k = $aa[$k];
}
}
function readDatabase($filename)
{
// amino asit veritabanını okuyalım
$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);
// 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);
?>
** Amino Asit Nesneleri Veritabanı: Array ( [0] => aminoacid Object ( [name] => Alanine [symbol] => ala [code] => A [type] => hydrophobic ) [1] => aminoacid Object ( [name] => Lysine [symbol] => lys [code] => K [type] => charged ) )