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. - <function>xml_parse_into_struct</function> ö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 ) ) ]]>