Forum und email

SimpleXML függvények

Bevezetés

A SimpleXML kiterjesztés egy nagyon egyszerű és könnyen használható eszközkészletet nyújt XML adatok objektummá kovenrtálásához, amiket ezután tulajdonságokkal és tömbindexekkel elemezhetünk.

Követelmények

A SimpleXML kiterjesztéshez PHP 5 szükséges.

Telepítés

A SimpleXML kiterjesztés alapállapotban engedélyezve van. A kikapcsoláshoz használd a --disable-simplexml konfigurálási opciót.

Példák

A referenciában több példához szükséges egy XML karakterlánc. Ahelyett, hogy ezt minden példa előtt újra leírnánk, inkább egy fájlba írjuk, és minden példa elején beágyazzuk ezt a fájlt. Ennek a fájlnak a tartalmát a következő példa mutatja. Egyik másik lehetséges megoldás az, hogy előre létrehozzuk az XML fájlt és minden példa elején a simplexml_load_file() függvénnyel beolvassuk.

Example#1 A beágyazandó example.php fájl XML karakterlánccal

<?php
$xmlstr 
= <<<XML
<?xml version='1.0' standalone='yes'?>
<movies>
 <movie>
  <title>PHP: Behind the Parser</title>
  <characters>
   <character>
    <name>Ms. Coder</name>
    <actor>Onlivia Actora</actor>
   </character>
   <character>
    <name>Mr. Coder</name>
    <actor>El Act&#211;r</actor>
   </character>
  </characters>
  <plot>
   So, this language. It's like, a programming language. Or is it a
   scripting language? All is revealed in this thrilling horror spoof
   of a documentary.
  </plot>
  <rating type="thumbs">7</rating>
  <rating type="stars">5</rating>
 </movie>
</movies>
XML;
?>

A SimpleXML egyszerűsége tisztán látszik azon, hogy milyen könnyen nyerünk ki egy karakterláncot vagy egy számot egy egyszerű XML dokumentumból.

Example#2 <plot> kinyerése

<?php
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

echo 
$xml->movie[0]->plot// "So this language. It's like..."
?>

Example#3 Hozzáférés nem egyedi elemekhez SimpleXML-lel

Amikor egy elemből több darab létezik ugyanannak a szülő elemnek az utódjaként, egyszerű körbejárás használható a tömbön.

<?php
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

/* Minden <movie> elemnek kiíratjuk elkülönítve a <plot> elemét. */
foreach ($xml->movie as $movie) {
   echo 
$movie->plot'<br />';
}

?>

Example#4 Attribútumok használata

Eddig csak az elemek neveinek és értékeinek beolvasásával ismerkedtünk meg. A SimpleXML azonban az attribútumokhoz is hozzáfér. Egy elem attribútumainak a hozzáféréséhez egy tömböt (array) kell használni, ami tartalmazza az elemeket.

<?php
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

/* Hozzáférés az első film (movie) <rating> eleméhez.
 * Értékelés (rating) skála. */
foreach ($xml->movie[0]->rating as $rating) {
    switch((string) 
$rating['type']) { // Attribútum megszerzése az elem tömbindexeként.
        
case 'thumbs':
            echo 
$rating' thumbs up';
            break;
        case 
'stars':
            echo 
$rating' stars';
            break;
    }
}
?>

Example#5 Elemek és attribútumok összehasonlítása szöveggel

Ahhoz, hogy egy elemet vagy egy attribútumot összehasonlítsunk egy karakterláccal, vagy olyan függvénynek kell átadnunk paraméterként, ami karakterláncot vár. A művelet előtt (string) típuskonverziót kell végrehajtani, máskülönben a PHP objektumként kezeli az elemet.

<?php     
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

if ((string) 
$xml->movie->title == 'PHP: Behind the Parser') {
    print 
'My favorite movie.';
}

htmlentities((string) $xml->movie->title);
?>

Example#6 XPath használata

A SimpleXML beépített XPath támogatással rendelkezik. Az összes <character> elem megkeresése:

<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);

foreach (
$xml->xpath('//character') as $character) {
    echo 
$character->name'played by '$character->actor'<br />';
}
?>

A '//' egy helyettesítő jel. Ahhoz, hogy pontos elérést határozz meg, hagyd el az egyik '/' -t.

Example#7 Értékek beállítása

Nem szükséges, hogy SimpleXML-ben az adatok állandóak legyenek. Az objektum minden elem kezeléséhez engedélyt ad.

<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);

$xml->movie[0]->characters->character[0]->name 'Miss Coder';

echo 
$xml->asXML();
?>

A fenti kód kimenete az új XML dokumentum lesz, ami úgyanúgy néz majd ki, mint az eredeti, kivéve azt, hogy a "Ms. Coder" szöveg "Miss Coder"-re változik.

Example#8 Elemek és attribútumok hozzáadása

A PHP 5.1.3 óta a SimpleXML képes utód elemek és attribútumok egyszerű hozzáadására.

<?php
include 'example.php';
$xml = new SimpleXMLElement($xmlstr);

$character $xml->movie[0]->characters->addChild('character');
$character->addChild('name''Mr. Parser');
$character->addChild('actor''John Doe');

$rating $xml->movie[0]->addChild('rating''PG');
$rating->addAttribute('type''mpaa');

echo 
$xml->asXML();
?>

A fenti kód kimenetként visszaad egy eredetihez XML dokumentumot, de új szereplővel és értékeléssel.

Example#9 DOM Kezelhetőség

A PHP segítségével XML adatokat konvertálhatunk a SimpleXML és DOM formátumok között. Ez a példa egy lehetőséget mutat be arra, hogy lehet DOM elemeket SimpleXML elemekké konvertálni.

<?php
$dom 
= new domDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!
$dom) {
     echo 
'Error while parsing the document';
     exit;
}

$s simplexml_import_dom($dom);

echo 
$s->book[0]->title;
?>

Table of Contents