(PHP 4, PHP 5, PHP 7, PHP 8)
xml_parse_into_struct — XML veriyi çözümleyip sonucu bir dizi içinde döndürür
$çözümleyici
,$veri
,&$değerler
,&$indis
= 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.
çö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.
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.
Sürüm: | Açıklama |
---|---|
8.0.0 |
ayrıştırıcı artık bir XMLParser
örneği olabiliyor; evvelce resource türünde geçerli bir
xml değeri kabul ederdi.
|
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 __construct ($aa)
{
foreach ($aa as $k=>$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);
?>
** 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 ) )