Temel SimpleXML kullanımı

Bu eklentideki bir çok örnek bir XML dizge gerektirir. Her örnekte bu dizgeyi tekrar tekrar yazmak yerine her örnekte içerilmek üzere bir dosyaya koyduk. Bu dosyanın içeriği aşağıda verilmiştir. İsterseniz kendi XML belgenizi oluşturup simplexml_load_file() işleviyle de okutabilirsiniz.

Örnek 1 - XML dizge olarak içerilecek example.php dosyası

<?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>
<great-lines>
<line>PHP solves all my web problems</line>
</great-lines>
<rating type="thumbs">7</rating>
<rating type="stars">5</rating>
</movie>
</movies>
XML;
?>

Basit XML eklentisinin basitleştiriciliği, en açık haliyle basit bir XML belgeden bir sayı veya dizgeyi çıkarırken görülür.

Örnek 2 - <plot> içeriğinin eldesi

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

echo
$movies->movie[0]->plot;
?>

Yukarıdaki örneğin çıktısı:

 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. 

Bir XML belgedeki elemanlara erişirken, PHP isimlendirme kurallarına uymayan (örneğin, tire içeren) eleman isimleri tek tırnak ve kaşlı ayraçlarla sarmalanarak belirtilebilir.

Örnek 3 - <line> içeriğinin eldesi

<?php
include 'example.php';

$xml = new SimpleXMLElement($xmlstr);

echo
$movies->movie->{'great-lines'}->line;
?>

Yukarıdaki örneğin çıktısı:

 PHP solves all my web problems 

Örnek 4 - Bir elemanın birden fazla örneğine erişim

Bir ebeveyn elemanın aynı isimdeki birden fazla çocuğunun içeriğini elde etmek için normal yineleme teknikleri kullanılır.

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);


foreach ($movies->movie->characters->character as $character) {
echo
$character->name, ' played by ', $character->actor, PHP_EOL;
}

?>

Yukarıdaki örneğin çıktısı:

 Ms. Coder played by Onlivia Actora Mr. Coder played by El ActÓr 

Bilginize:

Özellikler (önceki örnekteki $movies->movie) dizi değildir. Yinelenebilir ve erişilebilir nesnelerdir.

Örnek 5 - Özniteliklerin kullanımı

Şimdiye kadar hep eleman isimleri ve içerikleri ile çalıştık. Basit XML eklentisi eleman özniteliklerine de erişir. Eleman özniteliklerine, eleman ismini taşıyan dizinin anahtarları olarak erişebilirsiniz.

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);


foreach ($movies->movie[0]->rating as $rating) {
switch((string)
$rating['type']) { // Öznitelikler birer anahtardır
case 'thumbs':
echo
$rating, ' onaylı';
break;
case
'stars':
echo
$rating, ' yıldızlı';
break;
}
}
?>

Yukarıdaki örneğin çıktısı:

 7 thumbs up5 stars 

Örnek 6 - Elemanları ve öznitelikleri karşılaştırmak

Bir elemanı veya özniteliği bir dizge ile karşılaştırmak veya bir dizge gerektiren bir işleve aktarmak için nesnenin önüne (string) getirerek tür dönüşümü yapmalısınız. Aksi takdirde PHP, elemanı bir nesne olarak ele alır.

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

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

echo
htmlentities((string) $movies->movie->title);
?>

Yukarıdaki örneğin çıktısı:

 My favorite movie.PHP: Behind the Parser 

Örnek 7 - İki elemanı karşılaştırmak

İki SimpleXMLElement nesnesi, aynı elemana ait olsalar bile, farklı nesneler olarak ele alınır.

<?php
include 'example.php';

$movies1 = new SimpleXMLElement($xmlstr);
$movies2 = new SimpleXMLElement($xmlstr);
var_dump($movies1 == $movies2);
?>

Yukarıdaki örneğin çıktısı:

 bool(false) 

Örnek 8 - XPath kullanımı

Basit XML eklentisinin yerleşik XPath desteği vardar. Tüm <character> elemanlarını bulmak isteyelim:

<?php
include 'example.php';

$movies = new SimpleXMLElement($xmlstr);

foreach (
$movies->xpath('//character') as $character) {
echo
$character->name, ' played by ', $character->actor, PHP_EOL;
}
?>

'//character' ifadesindeki '//' bir kısaltma olup, belgedeki tüm character elemanları anlamına gelir (Bakınız: » XML Adresleme Dili (XPath) 1.0 belirtimi).

Yukarıdaki örneğin çıktısı:

 Ms. Coder played by Onlivia Actora Mr. Coder played by El ActÓr 

Örnek 9 - Değer atamak

SimpleXMLElement nesnesinin verileri birer sabit değildir. Nesnenin tüm elemanlarında değişiklik yapılabilir.

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

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

echo
$movies->asXML();
?>

Yukarıdaki örneğin çıktısı:

 <?xml version="1.0" standalone="yes"?> <movies> <movie> <title>PHP: Behind the Parser</title> <characters> <character> <name>Miss Coder</name> <actor>Onlivia Actora</actor> </character> <character> <name>Mr. Coder</name> <actor>El Act&#xD3;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> <great-lines> <line>PHP solves all my web problems</line> </great-lines> <rating type="thumbs">7</rating> <rating type="stars">5</rating> </movie> </movies> 

Örnek 10 - Eleman ve öznitelik eklemek

SimpleXMLElement nesnesine çocuk elemanlar ve öznitelikler kolayca eklenebilmektedir.

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

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

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

echo
$movies->asXML();
?>

Yukarıdaki örneğin çıktısı:

 <?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&#xD3;r</actor> </character> <character><name>Mr. Parser</name><actor>John Doe</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> <great-lines> <line>PHP solves all my web problems</line> </great-lines> <rating type="thumbs">7</rating> <rating type="stars">5</rating> <rating type="mpaa">PG</rating></movie> </movies> 

Örnek 11 - DOM ile çalışabilirlik

PHP, XML düğümlerin Basit XML ve DOM biçemleri arasında dönüşüm yapılabilmeyi sağlayan bir mekanizmaya sahiptir. Bu örnekte bir DOM elemanının bir SimpleXMLElement nesnesine dönüştürülmesi gösterilmiştir.

<?php
$dom
= new DOMDocument;
$dom->loadXML('<books><book><title>blah</title></book></books>');
if (!
$dom) {
echo
'Belge çözümlenirken hata oluştu';
exit;
}

$books = simplexml_import_dom($dom);

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

Yukarıdaki örneğin çıktısı:

 blah 
To Top