<kahvalti_menusu> <yiyecek> <isim>Belgian Waffles</isim> <fiyat>$5.95</fiyat> <aciklama>Two of our famous Belgian Waffles with plenty of real maple syrup</aciklama> <kalori>650</kalori> </yiyecek> <yiyecek> <isim>Strawberry Belgian Waffles</isim> <fiyat>$7.95</fiyat> <aciklama>Light Belgian waffles covered with strawberries and whipped cream</aciklama> <kalori>900</kalori> </yiyecek> <yiyecek> <isim>Berry-Berry Belgian Waffles</isim> <fiyat>$8.95</fiyat> <aciklama>Light Belgian waffles covered with an assortment of fresh berries and whipped cream</aciklama> <kalori>900</kalori> </yiyecek> <yiyecek> <isim>French Toast</isim> <fiyat>$4.50</fiyat> <aciklama>Thick slices made from our homemade sourdough bread</aciklama> <kalori>600</kalori> </yiyecek> <yiyecek> <isim>Homestyle Breakfast</isim> <fiyat>$6.95</fiyat> <aciklama>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</aciklama> <kalori>950</kalori> </yiyecek> </kahvalti_menusu>
Ancak bu kod sadece ilk bölümdeki bilgileri çekiyor diğerlerini almıyor. XML kütüphaneleri, plaintext vs. bir çok konuda nasıl yapılır biliyorum.
Fakat hoca string fonksiyonlarla yapılsın diyor. Şimdi burada sıkıntı şu:
Bu fonksiyonlar sanki girilen değerdeki verilerde arama yapıyorlar. Peki bir sonraki <isim> tagının pozisyonunu nereden bulacağım? Sürekli pozisyon araması için sürekli aşağılara gidecek. Nasıl çözebilirim?
Her defasında farklı olanı çağırmam için nasıl bir düzeltme yapabilirim?
Sanırım hocanız rekürsif fonksiyon kullanmanızı istediği için bu şekilde bir kısıtlama yapmış. Yalnızca strpos ve substr kullanarak şöyle yapabilirsin o halde
function xmlAyikla(&$xml, $tag_ac, $tag_kapa, $offset = 0) { // XML'in üzerinde çalışacağım kısmı. // her iterasyonda üzerinde çalışacağım bu kısmı daraltıyorum. $xml = substr($xml, $offset);
// bu çalışağım kısım içerisinde <x>___</x> etiketini arıyorum $pos_bas = strpos($xml, $tag_ac); $pos_son = strpos($xml, $tag_kapa);
// etiketleri bulamazsam fonksiyonu sonlandırıyorum. if (!$pos_bas || !$pos_son) return;
// bir sonraki iterasyon için XML'i daraltmaya başlayacağım konumu önceden belirliyorum. $offset = $pos_son + strlen($tag_kapa);
Üstad teşekkür ederim. Açıkcası bugün ben farklı bir şekilde ayarladım onu. Aşağıdaki kod biraz bad practice gibi duruyor olsa da işe yarıyor ve çalışıyor. Yalnız sizin yazdığınız kodu da deneyeceğim hemen :) Elinize sağlık.
Yazdığım aslında yıllar önce internetten trick diye aldığım bir kod var elimde.
Bu kod ile girilen verideki belirli tagler arasındaki veriyi çıkartabiliyorsunuz.
Ben bunu yapıyorum ve tek şekilde bilgi olarak alıyor.
Bu da XML kodu:
Ancak bu kod sadece ilk bölümdeki bilgileri çekiyor diğerlerini almıyor. XML kütüphaneleri, plaintext vs. bir çok konuda nasıl yapılır biliyorum.
Fakat hoca string fonksiyonlarla yapılsın diyor. Şimdi burada sıkıntı şu:
Bu fonksiyonlar sanki girilen değerdeki verilerde arama yapıyorlar. Peki bir sonraki <isim> tagının pozisyonunu nereden bulacağım? Sürekli pozisyon araması için sürekli aşağılara gidecek. Nasıl çözebilirim?
Her defasında farklı olanı çağırmam için nasıl bir düzeltme yapabilirim?