Şimdi Ara

PHP - XML Okurken karakter değiştirme - Yardım

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
15
Cevap
0
Favori
798
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • XML örnek yapım bu
    <eleman-info>
    <id>AAAAAAA</id>
    <aid>1111111</aid>
    <ce:a>ornek1</ce:a>
    <ce:b>ornek2</ce:b>
    </eleman-info>

    Daha önceden php'yle xml'den verileri çok rahatlıkla çekebiliyodum. Fakat bu sefer xml yapısında - ve : mevcut olduğu için eski yaptığım yöntemde başarısız oluyorum ve hata alıyorum. XML i çekerken - ve : karakterlerini değiştirebilirmiyim? veya başka bir yolla bu verileri çekebilirmiyim?
    --------------------------------------------------------------------------------
    Çalışan bir örnek: XML Yapım (icerik.xml)
    <g>
    <konu>
    <baslik>Görkem</baslik>
    <link>http://</link>
    <icerik>blablabla</icerik>
    </konu>
    </g>
    ---------------------
    <?php
    header("Content-Type: text/html; charset=utf8");
    $a=simplexml_load_file("icerik.xml");
    foreach ($a->konu as $konu) {
    echo $baslik=$konu->baslik.'
    ';
    echo $link=$konu->link.'<br>';
    echo $icerik=$konu->icerik.'<br>';
    echo "<hr>";
    }
    ?>







  • Foreacha diziyi döndürürken hata yapıyormussun gibi geldi bana..

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: cyclone_ugur

    Foreacha diziyi döndürürken hata yapıyormussun gibi geldi bana..

    Hocam alttaki çalışan örnek. Benim amacım xmlden çekmek için - ve : lerden kurtulmak. xml'i değişkene atadıktan sonra replace yapıyorum fakat sonuç alamıyorum.
  • Süslü parantezler ve tek tırnak kullanarak tireli elemanları çağırabilirsin.
    Örnek kullanım:

    $xml->{'eleman-info'}->id


    Kaynak:http://www.php.net/manual/en/simplexml.examples-basic.php
  • quote:

    Orijinalden alıntı: un.real

    Süslü parantezler ve tek tırnak kullanarak tireli elemanları çağırabilirsin.
    Örnek kullanım:

    $xml->{'eleman-info'}->id


    Kaynak:http://www.php.net/manual/en/simplexml.examples-basic.php


    Hocam kralsın yaaa çok teşekkür ederim. id,aid çekebiliyorum fakat bu sefer : olan verileri çekemiyorum.
    $xml->{'eleman-info'}->id oluyor fakat
    $xml->{'eleman-info'}->ce:a
    veya
    $xml->{'eleman-info'}->{'ce:a'} olmuyor

    dökümanı inceliyorum fakat : ile ilgili birşey bulamadım



    < Bu mesaj bu kişi tarafından değiştirildi grk3mm -- 24 Ocak 2012; 18:08:28 >




  • iki nokta üstüste notasyonu XML namespace notasyonudur. Bunun ön ekini (prefix) önce XML'in kök elemanında tanımlaman lazım. (Daha alt elemanlarda da tanımlayabilirsin ama kök elemanda tanımlarsan XML dökümanının her yerinde kullanabilirsin tanımladığın ön eki.)

    şöyle yapalım:

     
    <!-- XML Dosyan -->
    <kokEleman xmlns:ce="http://donanimhaber.com">
    <eleman-info>
    <id>AAAAAAA</id>
    <aid>1111111</aid>
    <ce:a>ornek1</ce:a>
    <ce:b>ornek2</ce:b>
    </eleman-info>
    </kokEleman>


     
    //PHP
    $nsliElemanlarDizisi = $xml->{'eleman-info'}->children("ce", true); //"ce" ön ekine sahip alt elemanları bir diziye doldurur
    var_dump($nsliElemanlarDizisi); //iki elemanlı diziyi ekrana bastırır.



    < Bu mesaj bu kişi tarafından değiştirildi un.real -- 24 Ocak 2012; 22:20:52 >




  • Hocam size ne kadar teşekkür etsem azdır. Verdiğiniz bilgileri uygulayıp ce: içeren herşeyi diziye attıktan sonra hepsini takır takır yazdırdım.
    Çok teşekkür ederim yardımlarınız için. Sayenizde hiç bilmediğim birşeyi öğrenmiş oldum.



    < Bu mesaj bu kişi tarafından değiştirildi grk3mm -- 25 Ocak 2012; 10:30:43 >
  • Yapay Zeka’dan İlgili Konular
    PHP POST Kaydetme sorunu?
    11 yıl önce açıldı
    Daha Fazla Göster
  • quote:

    Orijinalden alıntı: un.real

    iki nokta üstüste notasyonu XML namespace notasyonudur. Bunun ön ekini (prefix) önce XML'in kök elemanında tanımlaman lazım. (Daha alt elemanlarda da tanımlayabilirsin ama kök elemanda tanımlarsan XML dökümanının her yerinde kullanabilirsin tanımladığın ön eki.)

    şöyle yapalım:

     
    <!-- XML Dosyan -->
    <kokEleman xmlns:ce="http://donanimhaber.com">
    <eleman-info>
    <id>AAAAAAA</id>
    <aid>1111111</aid>
    <ce:a>ornek1</ce:a>
    <ce:b>ornek2</ce:b>
    </eleman-info>
    </kokEleman>


     
    //PHP
    $nsliElemanlarDizisi = $xml->{'eleman-info'}->children("ce", true); //"ce" ön ekine sahip alt elemanları bir diziye doldurur
    var_dump($nsliElemanlarDizisi); //iki elemanlı diziyi ekrana bastırır.


    Hocam peki diziye almadan yazdırmanın bir yöntemi varmı?




  • $xml->{'eleman-info'}->children("ce",'a');

    $xml->{'eleman-info'}->children("ce",'b');

    Bu şekilde diziye almadan yazdırmak istiyorum fakat 2 seferdede a 'yı yazıyor.



    < Bu mesaj bu kişi tarafından değiştirildi grk3mm -- 25 Ocak 2012; 10:48:45 >
  • Diziye aldırmadan yazdırmanın bir yöntemini ben bilmiyorum. Maalesef SimpleXml kullandığında XML Namespace'lerle ilgili böyle bir sıkıntı var, SimpleXml bu konuda çok yeterli bir araç değil.

    Senin yukarıda gösterdiğin kodun 2 seferde de a'yı yazdırmasının sebebi, children fonksiyonunun ikinci parametreyi boolean true olarak algılaması. Yani PHP o satırları şöyle görüyor:

     
    //children fonksiyonu iki parametre alır. Birinci parametre string tipinde olmalıdır. İkinci parametre opsiyoneldir (verilmese de olur, verilmediği takdirde false verilmiş gibi davranır.)
    //İkinci parametrenin amacı, birinci parametrede verilen string değerin ön ek mi yoksa namespace'in kendisi mi olduğunu ayırt etmektir.
    //kaynak:http://www.php.net/manual/en/simplexmlelement.children.php

    $xml->{'eleman-info'}->children("ce",'a'); // $xml->{'eleman-info'}->children("ce", true);

    $xml->{'eleman-info'}->children("ce",'b'); // $xml->{'eleman-info'}->children("ce", true);

    //çünkü null hariç string değerleri boolean'a çevirilirken true olarak çevirilirler.
    //0 hariç tamsayı değerleri de boolean'a çevirilirken true olarak çevirilir. 0 false olarak çevirilir.


    children fonksiyonundan başka bir de xpath fonksiyonunu kullanarak (xpath sorgulama yapmayı biliyor musun?) ilgili elemanları çekebilirsin, ancak bunun öncesinde registerXPathNamespace fonksiyonunu kullarak Namespace ön ekini XPath'e tanımlaman gerekiyor. Sonuç olarak yine bir array elde etmiş oluyorsun ama...



    < Bu mesaj bu kişi tarafından değiştirildi un.real -- 25 Ocak 2012; 12:45:24 >




  • Hocam hallettim.
    $xml->{'eleman-info'}->children("ce",true)->{'a'};
    veya
    $xml->{'eleman-info'}->children("ce",true)->{'b'};

    şeklinde veriyi çekip istediğim değişkene atıp kullanabiliyorum.
    Yardımlarınız için çok teşekkür ederim.
  • Bilmediğim bir özellikti, ihtiyaç duymamıştım ama öğrenmem iyi oldu un.real ve grk3mm hocam... trkodlama'ya bunu yazarım :)

    teşekkürler tekrardan,
  • Tekrar bir noktada takıldım. Şuana kadar hep tek xml dosyayı üzerinde çalıştım. Ama bu sefer hedefini verecegim bir klasör icindeki tüm xml'leri kullanmam gerekiyor.
    Örnek vercek olursam.
    C:\wamp\www\deneme\1\a.xml
    C:\wamp\www\deneme\2\a.xml
    C:\wamp\www\deneme\3\a.xml
    3 tane xml dosyam var.
    Php'ye hedefimi C:\wamp\www\deneme olarak vermek istiyorum. Bu hedefi verdikten sonra klasörlerin içindeki xml dosyalarını nasıl buldurabilirim? Nasıl bir döngü kurabilirim?
  • PHP'nin dosya sistemine yönelik fonksiyonlarını kullanarak dizinleri ve dizin içeriklerini taratabilirsin. Şuradan seçip beğen :)http://www.php.net/manual/en/refs.fileprocess.file.php

    Sana yardımcı olacak bir arama şu olabilir:http://bit.ly/wv6A9x ya da İngilizcesinden daha çok kaynağa da ulaşabilirsin:http://bit.ly/AapiIT




  • quote:

    Orijinalden alıntı: un.real

    PHP'nin dosya sistemine yönelik fonksiyonlarını kullanarak dizinleri ve dizin içeriklerini taratabilirsin. Şuradan seçip beğen :)http://www.php.net/manual/en/refs.fileprocess.file.php

    Sana yardımcı olacak bir arama şu olabilir:http://bit.ly/wv6A9x ya da İngilizcesinden daha çok kaynağa da ulaşabilirsin:http://bit.ly/AapiIT

    Teşekkürler hocam. İnceliyorum şuan. Dizinleri yazdırabiliyorum fakat en alt dizine kadar inip bütün dizinlerdeki xml i çekmem lazım. Uğraşıyorum.




  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.