CXLI. SimpleXML függvények

Bevezetés

A SimpleXML kiterjesztés nagyon egyszeru és könnyen használható eszközt nyújt, hogy XML-t objektummá konvertáljunk, amiket normális tulajdonság-válogatókkal és tömb indexekkel 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 opciót.

Példák

Több példának ebben a referinciában szükséges XML karakterlánc. Inkább minden példában ugyanazt a karakterláncot használjuk, rakjuk bele egy fájlba, amit minden példában beágyazunk. A következo példában látjuk ezt a fájlt. Vagy készíthetsz egy XML dokumentumot, amit a simplexml_load_file() fügvénnyel olvasol be.

Példa 1. Beágyazandó fájl (example.php) 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 egyszerusége tisztál látszik, amikor valaki kinyer egy karakterláncot vagy számot egy egyszeru XML dokumentumból.

Példa 2. <plot> megszerzése

<?php
include 'example.php';

$xml = simplexml_load_string($xmlstr);

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

Példa 3. Hozzáférés nem egyedi elemekhez SimpleXML-lel

Amikor egy elembol több darab létezik egy egyszeru szülo elem utódaként, rendes körbejárás technika használható.

<?php
include 'example.php';

$xml = simplexml_load_string($xmlstr);

/* <movie> csomó körbejárása, és <plot> elkülönített kiíratása. */
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. 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álnod, ami tartalmazza az elemeket.

<?php
include 'example.php';

$xml = simplexml_load_string($xmlstr);

/* Access the <rating> nodes of the first movie.
* Output the rating scale, too. */
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 elemet vagy attribútumot összehasonlíts karakterlánccal, vagy föggvényt hívj meg, ami karakterláncot vár, (string) típuskonverziót kell használnod. Másképpen a PHP objektumként kezeli az elemet.

<?php     
include 'example.php';

$xml = simplexml_load_string($xmlstr);

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

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

Példa 6. Xpath használata

A SimpleXML tartalmazza a beépített Xpath támogatást. Az összes <character> elem megkeresése:

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

foreach (
$xml->xpath('//character') as $character) {
    echo
$character->name, '-t ', $character->actor, ' játssza<br />';
}
?>

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

Példa 7. Értékek megadá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 = simplexml_load_string($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. DOM Interoperability

A PHP-nak van szerkezete, hogy XML csomókat konvertáljunk SimpleXML és DOM forátumok között. Ez a példa bemutatja, hogyan lehet DOM elemet SimpleXML elemmé változtatni.

<?php
$dom
= new domDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!
$dom) {
     echo
'Hiba a dokumentum feldolgozása közben!';
     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() --  Creates a new SimpleXMLElement object
SimpleXMLElement->getDocNamespaces() --  Returns namespaces declared in document
SimpleXMLElement->getName() -- Gets the name of the XML element
SimpleXMLElement->getNamespaces() --  Returns namespaces used in document
SimpleXMLElement->xpath() --  Runs XPath query on XML data
simplexml_import_dom --  Get a SimpleXMLElement object from a DOM node.
simplexml_load_file --  Interprets an XML file into an object
simplexml_load_string --  Interprets a string of XML into an object