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Ó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
- SimpleXMLElement->addAttribute — Hozzáad egy attribútumot egy SimpleXML elemhez
- SimpleXMLElement->addChild — Hozzáad egy utód elemet egy SimpleXML elemhez
- SimpleXMLElement->asXML — Helyesen formázott, SimpleXML objektum alapú XML karakterlánccal tér vissza
- SimpleXMLElement->attributes — Visszaadja egy elem attribútumait
- SimpleXMLElement->children — A megadott elem utódjait keresi meg
- SimpleXMLElement->__construct() — Létrehoz egy SimpleXMLElement objektumot
- SimpleXMLElement->getDocNamespaces() — Visszatér a dokumentumban deklarált névterekkel
- SimpleXMLElement->getName — Kinyeri egy XML elem nevét
- SimpleXMLElement->getNamespaces() — A dokumentumban használt névtereket adja vissza
- SimpleXMLElement->registerXPathNamespace() — Egy prefix/ns szövegkörnyezetet hoz létre a következő XPath keresés számára
- SimpleXMLElement->xpath — Xpath kérést hajt végre az XML adaton
- simplexml_import_dom — SimpleXMLElement objektummá konvertál egy DOM objektumot
- simplexml_load_file — XML fájlt dolgoz fel, és tölt be objektumba
- simplexml_load_string — XML karakterláncot értelmez, és tölt be objektumba