SimpleXML ile XML okuma
Bir XML belgesini dosyadan okuyup yazdirma.
Bunun icin su fonksiyonlar kullanilir:
$xml = simplexml_load_file($dosyaAdi): verilen dosyadaki xml belgesini okur ve $xml belgesine icerigi getirir. Donus tipi bir nesnedir ve SimpleXMLElement sinifinin bir nesnesidir.
SimpleXMLElement->getName(): XML elemaninin adini dondurur.
SimpleXMLElement->children(): cocuk elemanlari bir SimpleXMLElement dizisi halinde dondurur. Dizinin indisi elemanlarin im isimleri, degerleri de elemanlarin degeridir.
Not.xml belgesi soyle olsun:
<alici> Ali </alici>
<gon> Zeki </gon>
<konu> Bulusma </konu>
<mesaj> Hafta sonu mutlaka goruselim </mesaj>
</not>
Bu XML belgesini okuyup yazdiracak Php dosyasi soyle olabilir:
Bu PHP programinin ciktisi soyle olur:
<body>
not<br/>
alici: Ali <br/>
gon: Zeki <br/>
konu: Bulusma <br/>
mesaj: Hafta sonu mutlaka goruselim <br/>
</body>
</html>
PHP ile Encoding Ayarlamasi
Simdi yukardaki program ile icinde turkce karakterler olan bir XML belgesini okuyalim.
XML belgemiz soyle olsun:
<not>
<alýcý> Ali </alýcý>
<gön> Zeki </gön>
<konu> Buluþma </konu>
<mesaj> Hafta sonu mutlaka görüþelim. Kaðný ile çok gezme. </mesaj>
</not>
Bu belgeyi ayni programla okudugumuzda sonuc soyle olur:
<body>
not<br/>
alıcı: Ali <br/>
gön: Zeki <br/>
konu: BuluÅŸma <br/>
mesaj: Hafta sonu mutlaka görüşelim. Kağnı ile çok gezme. <br/>
</body>
</html>
Bu durumda PHP aslinda tarayiciya dogru bilgi gonderiyor ama HTML belgesinde gelen metnin karakter kodlamasi belirtilmediginden tarayici gelen kodu varsayilan kodlama sekli olan ISO-8859-1 olarak yorumluyor. Boylelikle gonderilen ile tarayicinin yorumladigi kodlama sekilleri uyusmadigi icin sonuc bozuk oluyor.
Bu problemi html belgesine metnin encoding seklini belirterek cozebiliriz. Bunun icin asagidaki gibi bir php sayfasi dogru sonuc uretir:
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" />
</head>
<body>
<?php
$xml = simplexml_load_file("../xml/Not2.xml") or
die("XML belgesi yuklenemiyor. </body></html>") ;
echo $xml->getName() . "<br/>\n";
$cocuklar = $xml->children();
foreach($cocuklar as $cocuk){
echo $cocuk->getName() . ": " . $cocuk . "<br/>\n";
}
?>
</body>
</html>
Bu php belgesinin ciktisi soyle olur:
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" />
</head>
<body>
not<br/>
alýcý: Ali <br/>
gön: Zeki <br/>
konu: Buluþma <br/>
mesaj: Hafta sonu mutlaka görüþelim. Kaðný ile çok gezme. <br/>
</body>
</html>
Stringden XML nesnesi olusturma
Asagidaki gibi tum XML belgesi bir degiskendeyse de XML nesnesi olusturulabilir.
Iki katli XML belgesii okuma
Asagida ayrica iki katli bir XML nesnesini nasil okuyabilecegimiz gozukmektedir.
Bir XML belgesindeki attributeleri okuma
Bir XML belgesindeki bir elemanin attributeleri bir dizi halinde verilir. Bu dizide indis attribute adini deger ise attribute degerini gosterir.
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" />
</head>
<body>
<?php
$xmlStr = "<?xml version='1.0' encoding='UTF-8'?>
<film isbn='0836217462'>
<filmIsmi> Kurtlar Vadisi-Irak </filmIsmi>
<yönetmen> Raci Þaþmaz </yönetmen>
<gösterimTarihi>2006-02-10</gösterimTarihi>
<karakter>
<isim>Necati Þaþmaz</isim>
<filmdekiIsmi>Polat</filmdekiIsmi>
<rolu> baþrol. kahraman </rolu>
<yas> 34 </yas>
</karakter>
<karakter>
<isim> kimse</isim>
<filmdekiIsmi>memati</filmdekiIsmi>
<rolu> yardimci oyuncu </rolu>
</karakter>
</film>";
$xml = new SimpleXMLElement($xmlStr);
echo $xml->getName() . "<br/>\n";
// attribute dizi olarak dondurulur.
// indisler attribute adi, deger de attribute degeridir.
$ozellikler = $xml->attributes();
foreach($ozellikler as $isim => $deger)
echo $isim . ": " . $deger . "<br/>\n";
$cocuklar = $xml->children();
foreach($cocuklar as $cocuk){
if(count($cocuk)> 1)
echo "<br/>\n";
echo $cocuk->getName() . ": " . $cocuk . "<br/>\n";
foreach($cocuk as $c){
echo $c->getName() . ": " . $c . "<br/>\n";
}
}
?>
</body>
</html>
XML nesnesini degistirme
Olusturulmus olan bir XML nesnesini degistirebiliriz. Bunun icin SimpleXMLElement sinifinin addChild fonksiyonunu ya da addAttribute fonksiyonlarini kullaniriz:
function yazdir($xml){
echo $xml->getName() . "<br/>\n";
// attribute dizi olarak dondurulur.
// indisler attribute adi, deger de attribute degeridir.
$ozellikler = $xml->attributes();
foreach($ozellikler as $isim => $deger)
echo $isim . ": " . $deger . "<br/>\n";
$cocuklar = $xml->children();
foreach($cocuklar as $cocuk){
if(count($cocuk)> 1)
echo "<br/>\n";
echo $cocuk->getName() . ": " . $cocuk . "<br/>\n";
foreach($cocuk as $c){
echo $c->getName() . ": " . $c . "<br/>\n";
}
}
}
?>
<html>
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" />
</head>
<body>
<?php
// iconv_set_encoding("output_encoding", "UTF-8") or die("encoding ayarlanamiyor. </html>");
$film = simplexml_load_file("../xml/Film.xml") or
die("XML belgesi yuklenemiyor. </body></html>") ;
yazdir($film);
// bir karakter ekleyelim
// <karakter>
// <isim> Kimbilir</isim>
// <filmdekiIsmi>Abdulhey</filmdekiIsmi>
// <rolu> fedai </rolu>
// </karakter>
$kar = $film->addChild("karakter");
$kar->addChild("isim", "Kimbilir");
$kar->addChild("filmdekiIsmi", "Abdulhey");
$kar->addChild("rolu", "fedai");
echo "<p> <h3>Eklemeden Sonra</h3>";
yazdir($film);
?>
</body>
</html>




Yorum Yaz