PHP 8.4.1 Released!

xml_parse_into_struct

(PHP 4, PHP 5, PHP 7, PHP 8)

xml_parse_into_structXML veriyi çözümleyip sonucu bir dizi içinde döndürür

Açıklama

xml_parse_into_struct(
    XMLParser $çözümleyici,
    string $veri,
    array &$değerler,
    array &$indis = null
): int

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.

Bağımsız Değişkenler

çö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.

Dönen Değerler

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 Bilgisi

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.

Örnekler

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>
Bu belgeyi çözümleyip uygun nesneleri üretecek kod:

Ö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);

?>
parsemoldb.php betiği çalıştırılınca, $db dizisi Amino asit nesnelerinden oluşturulmuş olur. Betiğin çıktısı şöyle olur:
** 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
        )

)

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top