Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [XML][PHP] Pobranie odpowiednich danych z pliku XML
Forum PHP.pl > Forum > Przedszkole
kstawinski
Witam, poniższy kod generuje mi 6 wyników z odpowiednio: nazwą serwisu, tytułem posta, opisem posta i odnośnikiem do niego. To jest okej i działa jak najbardziej w porządku, ale przed tym wyświetla mi się nazwa serwisu tyle razy, ile jest znaczników <item> w pliku xml. W czym może tkwić problem i jak go rozwiązać?

  1. <?php
  2. $xml = simplexml_load_file("__odnosnik do pliku xml__");
  3.  
  4. foreach ($xml as $channel)
  5. {
  6. foreach($channel as $item)
  7. {
  8. echo $channel->title;
  9. echo $item->link;
  10. echo $item->title;
  11. echo $item->description;
  12. ';
  13. }
  14. }
  15.  
  16. ?>

Szado
Ciężko gdybać nie znając schematu XML-a, ale zgaduję, że $channel->title; zawiera właśnie nazwę serwisu z którego aktualnie listujesz wpisy. Wyrzuć po prostu pierwsze echo do pierwszej pętli.
kstawinski
Teraz nazwa serwisu wyświetla się tylko raz (na początku listy). Da rade zrobić, aby wyświetlała się raz obok każdego tytułu?

Edit:
Zauważyłem jeszcze jeden błąd. Poniżej zamieszczam cały kod, wraz z linkiem do pliku XML. Chodzi o to, że tym razem pojawia się 6 pustych divów, a po nich to co powinno się w nich znaleźć - tytuł i opis posta.

  1. <?php
  2. $xml = simplexml_load_file("http://blog.piotrnalepa.pl/feed/");
  3.  
  4. foreach ($xml as $channel)
  5. {
  6. echo $channel->title;
  7.  
  8. foreach($channel as $item)
  9. {
  10. echo $item->link;
  11. echo $item->title;
  12. echo $item->description;
  13. }
  14. }


up
bostaf
Rzuciłem sobie to wszystko na
  1. var_dump('<pre>', $xml);

i zobaczyłem, że pierwsze 6 elementów to nie są wpisy bloga tylko jego parametry (title, link, ...). Trzeba je jakoś pominąć i załatwione. Tak na szybko z property_exists:
  1. $xml = simplexml_load_file("http://blog.piotrnalepa.pl/feed/");
  2.  
  3. foreach ($xml as $channel)
  4. {
  5. echo $channel->title;
  6.  
  7. foreach($channel as $item)
  8. {
  9. if (property_exists($item, 'link')) {
  10. echo $item->link;
  11. echo $item->title;
  12. echo $item->description;
  13. }
  14. }
  15. }

Ale na pewno da się inaczej i może bardziej skutecznie/ergonomiczne.
kstawinski
Cytat(bostaf @ 1.06.2017, 21:45:26 ) *
Rzuciłem sobie to wszystko na
  1. var_dump('<pre>', $xml);

i zobaczyłem, że pierwsze 6 elementów to nie są wpisy bloga tylko jego parametry (title, link, ...). Trzeba je jakoś pominąć i załatwione. Tak na szybko z property_exists:
  1. $xml = simplexml_load_file("http://blog.piotrnalepa.pl/feed/");
  2.  
  3. foreach ($xml as $channel)
  4. {
  5. echo $channel->title;
  6.  
  7. foreach($channel as $item)
  8. {
  9. if (property_exists($item, 'link')) {
  10. echo $item->link;
  11. echo $item->title;
  12. echo $item->description;
  13. }
  14. }
  15. }

Ale na pewno da się inaczej i może bardziej skutecznie/ergonomiczne.


Wszystko działa, dzięki bardzo wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.