CXLIV. SimpleXML függvények

Bevezetés

A SimpleXML kiterjesztés nagyon egyszerű és könnyen használható eszközkészletet nyújt XML adatok objektummá kovenrtálásához, amit normális 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értelmezett állapotban engedélyezve van. A kikapcsoláshoz használd a --disable-simplexml konfigurálási opciót.

Példák

Ebben a referenciában sok példához szükséges egy XML karakterlánc. Ahelyett, hogy minden példa előtt megismételnénk, inkább 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. Más megoldásként készíthetsz egy XML fájlt, amit a simplexml_load_file() függvénnyel olvasol be.

Példa 1. 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, amikor egy kinyerünk egy karakterláncot vagy egy számot egy egyszerű XML dokumentumból.

Példa 2. <plot> kinyerése

<?php
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

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

Példa 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 alkalmazható.

<?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 />';
}

?>

Példa 4. Attribútumok használata

Eddig csak az elemek neveinek és értékeinek beolvasásával ismerkedtünk meg. A SimpleXML az attribútumokhoz is hozzáfér. Egy elem attribútumainak hozzáféréséhez valójában 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 elem indexként.
    
case 'thumbs':
        echo
$rating, ' thumbs up';
        break;
    case
'stars':
        echo
$rating, ' stars';
        break;
    }
}
?>

Példa 5. Elemek és attribútumok összehasonlítása szöveggel

Ahhoz, hogy egy elemet vagy attribútumot összehasonlítsunk egy karakterláccal, vagy olyan függvényhez adjuk át paraméterként, ami karakterláncot vár, előtte (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);
?>

Példa 6. XPath használata

A SimpleXML beépített XPath támogatást tartalmaz. 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 />';
}
?>

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

Példa 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, úgyanúgy néz majd ki, mint az eredeti, kivéve azt, hogy a "Ms. Coder" "Miss Coder"-re változik.

Példa 8. Elemek és attribútumok hozzáadása

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

<?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.

Példa 9. DOM Kezelhetőség

A PHP szerkezetével XML adatokat konvertálhatunk át SimpleXML és DOM formátumok között. Ez a példa egy lehetőséget mutat be DOM elemek SimpleXML elemekké konvertálásához.

<?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;
?>

Tartalom
SimpleXMLElement->addAttribute --  SimpleXML elemhez attribútumot ad.
SimpleXMLElement->addChild --  Utód elemet ad a SimpleXML elemhez.
SimpleXMLElement->asXML --  Jól formázott SimpleXML-elem alapú XML karakterlánccal tér vissza.
SimpleXMLElement->attributes --  Egy elem attribútumait azonosítja.
SimpleXMLElement->children --  A megadott csomó utódjait keresi meg.
SimpleXMLElement->__construct() --  Új SimpleXMLElement objektumot hoz létre
SimpleXMLElement->getDocNamespaces() --  Visszatér a dokumentumban deklarált névterekkel
SimpleXMLElement->getName -- Kinyeri az XML elem nevét
SimpleXMLElement->getNamespaces() --  A dokumentumban használt névtereket adja vissza
SimpleXMLElement->registerXPathNamespace() --  Creates a prefix/ns context for the next XPath query
SimpleXMLElement->xpath --  Xpath kérést hajt végre az XML objektumon.
simplexml_import_dom --  SimpleXMLElement objektumot ad vissza DOM objektumból.
simplexml_load_file --  XML fájlt dolgoz fel, és tölt be objektumba
simplexml_load_string --  XML karakterláncot értelmez, és betölt objektumba