13
Ara
Gönderen Orhan DOĞAN, Kategori PHP
SimpleXML nesnesini diziye çeviren PHP fonksiyonuPHP, XML formatındaki metin veya dosyalar üzerindeişlem yapabilmek için SimpleXML araç setini kullanıma sunmuştur. SimpleXML araç seti, XML kaynağını dahili bir nesneye çevirir ve oluşan bu nesne ile XML kaynağı üzerinde işlem yapmamızı sağlar.Yazımızın esas amacı size SimpleXML nesnesinin içeriğini PHP dizisine dönüştürmektir. Yazdığım kodu zip formatında kendi bilgisayarınıza indirip kullanabilirsiniz.
PHP de SimpleXML’i örnek kullanımı:
-
$xmlmetin="<?xml version=’1.0′ standalone=’yes’?><kitaplar><adi>PHP ve MySQL</adi><yazar>Luke Welling</yazar></kitaplar>";
-
$xml = new SimpleXMLElement($xmlmetin);
-
SimpleXML nesnesinin kullanımı bu kadar basittir. Burada SimpleXML’in temel kullanımını anlatmayacağım, daha detaylı bilgiye buraya tıklayarak ulaşabilirsiniz.
SimpleXML ile çalışırken, XML yapısının diziye aktarılması gerekliliğyle karşı karşıya kalmıştım. Birçok yazılmış kodu inceledikten sonra, neyazıkki hiç birisinin tam istediğimi karşılamadığını farkettim. Pes ettim ve aramaktan vazgeçtim ve kendi kodumu yazdım. Aşağıda sizinle paylaşacağım kod, SimpleXML ile oluşturulmuş nesneyi, PHP dizisine dönüştürüyor.Herşeyden önce, fonksiyona parametre olarak geçeceğiniz değişken, geçerli bir SimpleXML nesnesi olmalıdır. İşte SimpleXML nesnesini diziye çeviren fonkyison:
-
/**
-
* @desription SimpleXML nesnesini parametre olarak alan bu fonkyion, gelen SimpleXML nesnesini
-
* diziye çevirir ve sonuç olarak bu diziyi döndürür
-
*
-
* @author Orhan DOĞAN
-
* $email <a href="mailto:od@orhandogan.us">od@orhandogan.us</a>
-
* @date 13.12.2007, 12:30
-
* @param object $xml SimpleXML object
-
* @return array
-
*/
-
function simpleXML_to_array($xml) {
-
# düğümün değerinin tutlacağı dizi indisi
-
-
#düğümün öz niteliklerinin tutulacaüı dizi indisi
-
define(DUGUM_OZNITELIKLERI,
‘#A#’);
-
-
foreach($xml->children() as $dugum => $deger_veya_altdugum) {
-
#çocuk nesneyi yeniden çağır (öz yinele)
-
$cocuk = simpleXML_to_array($deger_veya_altdugum);
-
#düğümün öz nitelikleri varsa NODE_ATTRIBUTES dizi indisi altında topla
-
foreach( $deger_veya_altdugum->attributes() as $ak => $av ) {
-
$cocuk[DUGUM_OZNITELIKLERI][$ak] = (string)$av;
-
}
-
if(!$cocuk[DUGUM_OZNITELIKLERI]){
-
$cocuk[DUGUM_OZNITELIKLERI]=”;
-
}
-
if(!$cocuk[DUGUM_DEGERI]){
-
$cocuk[DUGUM_DEGERI
] =
trim((string
)$deger_veya_altdugum);
-
}
-
#düğüm, dizi elemanı veya değeri olarak ekleniyor
-
-
$sonuc[$dugum] = $cocuk;
-
-
if(count($sonuc[$dugum])==
2){
-
if($sonuc[$dugum][DUGUM_OZNITELIKLERI] ||$sonuc[$dugum][DUGUM_DEGERI] ){
-
-
$tmp[DUGUM_OZNITELIKLERI]=$sonuc[$dugum][DUGUM_OZNITELIKLERI];
-
$tmp[DUGUM_DEGERI]=$sonuc[$dugum][DUGUM_DEGERI];
-
unset($sonuc[$dugum][DUGUM_OZNITELIKLERI
]);
-
unset($sonuc[$dugum][DUGUM_DEGERI
]);
-
$sonuc[$dugum][0]=$tmp;
-
-
}
-
}
-
if(count(array_diff_key
($sonuc[$dugum],
$cocuk))==
0 &&
count($sonuc[$dugum])>
0){
-
$tmp=$sonuc[$dugum];
-
-
$sonuc[$dugum][]=$tmp;
-
}
-
$sonuc[$dugum][] = $cocuk;
-
} else {
-
$sonuc[$dugum] =
array($sonuc[$dugum]);
-
$sonuc[$dugum][] = $cocuk;
-
}
-
}
-
return $sonuc;
-
}
Fonksiyonu içeren PHP kodunu buraya tıklayarak indirebilirsiniz. İndirdiğiniz PHP kodu dosyası, UTF-8 formatında BOM olmadan kaydedilmiştir. Dizinin örnek kullanımı ve çıktısı aşaşıdadır:
-
<?
-
$xml_metin="<?xml version=’1.0′ standalone=’yes’?>
-
<notlar>
-
<not>
-
<tarih>13.12.2007, 13:27</tarih>
-
<kimden>Orhan</kimden>
-
<kime>Ahmet</kime>
-
<baslik icerik=\"metin\"><![CDATA[SimpleXML koduna bir gözatar mısın?]]></baslik>
-
<ileti icerik=\"HTML\"><![CDATA[Abi yeni bi kod yazdım, seninde işine yarayacağını düşünüyorum, bir gözatıver…Selamlar.]]>
-
<tavsiye adres=\"öz nitelik 11\">tavsiye 1</tavsiye>
-
<tavsiye adres=\"öz nitelik 22\">tavsiye 2</tavsiye>
-
<tavsiye adres=\"öz nitelik 33\">tavsiye 3</tavsiye>
-
</ileti>
-
</not>
-
-
<not>
-
<tarih>13.12.2007, 14:32</tarih>
-
<kimden>Ahmet</kimden>
-
<kime>Orhan</kime>
-
<baslik icerik=\"metin\"><![CDATA[Cvp: SimpleXML koduna bir gözatar mısın?]]></baslik>
-
<ileti icerik=\"HTML\"><![CDATA[Orhan’cım kodunu inceledim ve denedim. Gayet güzel işe yarar. eline sağlık.. Selamlar]]>
-
<tavsiye adres=\"öz nitelik 44\">tavsiye 4</tavsiye>
-
<tavsiye adres=\"öz nitelik 55\">tavsiye 5</tavsiye>
-
<tavsiye adres=\"öz nitelik 66\">tavsiye 6</tavsiye>
-
</ileti>
-
</not>
-
</notlar>";
-
-
$xml = simplexml_load_string($xml_metin);
-
$dizi=simpleXML_to_array($xml);
-
-
-
?>
Yukarıdaki fonksiyon çalıştırıldığında aşağıdaki çıktı elde edilecektir:
-
-
-
(
-
-
-
-
(
-
-
-
-
(
-
-
-
-
(
-
-
[#A#] =>
-
-
[#V#] => 13.12.2007, 13:27
-
-
)
-
-
-
-
(
-
-
[#A#] =>
-
-
[#V#] => Orhan
-
-
)
-
-
-
-
(
-
-
[#A#] =>
-
-
[#V#] => Ahmet
-
-
)
-
-
-
-
(
-
-
[#A#] => Array
-
-
(
-
-
[icerik] => metin
-
-
)
-
-
[#V#] => SimpleXML koduna bir gözatar mısın?
-
-
)
-
-
-
-
(
-
-
-
-
(
-
-
-
-
(
-
-
[#A#] => Array
-
-
(
-
-
[adres] => öz nitelik 11
-
-
)
-
-
[#V#] => tavsiye 1
-
-
)
-
-
-
-
(
-
-
[#A#] => Array
-
-
(
-
-
[adres] => öz nitelik 22
-
-
)
-
-
[#V#] => tavsiye 2
-
-
)
-
-
-
-
(
-
-
[#A#] => Array
-
-
(
-
-
[adres] => öz nitelik 33
-
-
)
-
-
[#V#] => tavsiye 3
-
-
)
-
-
)
-
-
[#A#] => Array
-
-
(
-
-
[icerik] => HTML
-
-
)
-
-
[#V#] => Abi yeni bi kod yazdım, seninde işine yarayacağını düşünüyorum, bir gözatıver…Selamlar.
-
-
)
-
-
[#A#] =>
-
-
[#V#] =>
-
-
)
-
-
-
-
(
-
-
-
-
(
-
-
[#A#] =>
-
-
[#V#] => 13.12.2007, 14:32
-
-
)
-
-
-
-
(
-
-
[#A#] =>
-
-
[#V#] => Ahmet
-
-
)
-
-
-
-
(
-
-
[#A#] =>
-
-
[#V#] => Orhan
-
-
)
-
-
-
-
(
-
-
[#A#] => Array
-
-
(
-
-
[icerik] => metin
-
-
)
-
-
[#V#] => Cvp: SimpleXML koduna bir gözatar mısın?
-
-
)
-
-
-
-
(
-
-
-
-
(
-
-
-
-
(
-
-
[#A#] => Array
-
-
(
-
-
[adres] => öz nitelik 44
-
-
)
-
-
[#V#] => tavsiye 4
-
-
)
-
-
-
-
(
-
-
[#A#] => Array
-
-
(
-
-
[adres] => öz nitelik 55
-
-
)
-
-
[#V#] => tavsiye 5
-
-
)
-
-
-
-
(
-
-
[#A#] => Array
-
-
(
-
-
[adres] => öz nitelik 66
-
-
)
-
-
[#V#] => tavsiye 6
-
-
)
-
-
)
-
-
[#A#] => Array
-
-
(
-
-
[icerik] => HTML
-
-
)
-
-
[#V#] => Orhan’cım kodunu inceledim ve denedim. Gayet güzel işe yarar. eline sağlık.. Selamlar
-
-
)
-
-
[#A#] =>
-
-
[#V#] =>
-
-
)
-
-
)
-
-
)
Düğümlerin Öznitelik ve Değerleri #A# ve #V# dizi indisleriyle tanımlanmaktadır. Mesela, örnek koddaki XML yapısında tanımlanmış “tarih” düğümünün değerine ulaşmak için:
ifadesi kullanılır.
Bir Yanıt
PHP’de, SimpleXML Dizi karşılıklı dönüşümü , Orhan DOĞAN
Aralık 14th, 2007 at 7:27 pm
1[…] önce SimpleXML nesnesinin Diziye çevrilmesi başlıklı yazımda konuya bir giriş yapmıştım. Bu yazımda sizinle iki PHP fonksiyonunu […]
Bu gönderiye ait yorumlar için RSS beslemesi · TrackBack URI
Yorum yazın
Yorum göndermek için giriş yapmış olmanız gerekir.