Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie danych z pliku XML za pomocą php
Forum PHP.pl > Forum > PHP
apek
Witam,

mam pewien problem... mam plik xml w formacie:

<offers>
<offer>
<id>123</id>
<title>tytul</title>
<link>http://example.com/api/?a=go_offer&user_id=123&id=123&sid=</link>
</offer>
<offer>
<id>1234</id>
<title>tytul2</title>
<link>http://example.com/api/?a=go_offer&user_id=123&id=123&sid=</link>
</offer>
</offers>

No i musze zrobić tak żeby można było kliknąć na "title" i otworzył się "link"
Napisałem więc taki oto kod:
$offers = simplexml_load_file('test.xml');
foreach($offers -> offer as $offer){
echo $offer -> id, $offer -> title, $offer -> link;
echo "<br />";
}


Wszystko działa jak należy jeśli LINK jest "normalny" - czyli bez znaków "&" jeśli w xml'u pojawia się coś takiego jak &id=XXX to nic się nie wyświetla.

Próbowałem preg_replace ale nic z tego.. nie wiem co źle robię.

Siedze już nad tym od 2 godzin i nic nie mogę wymyślić :/

Pozdrawiam, Michal

ghost1511
Próbowałeś tego?
htmlspecialchars
apek
Jak tego użyć w tym przypadku? Tak żeby ta część kodu działała:

foreach($offers -> offer as $offer){
echo $offer -> id, $offer -> title, $offer -> link;
echo "<br />";
}

a nie tylko wyświetlało cały XML
ghost1511
Już samego xml'a masz źle sformatowanego. znak & powinien być zamieniony na jego encję &amp; lub umieść linki w tagu CDATA
apek
właśnie w tym jest problem, ale nic z tym nie zrobię, bo takie jest API :/
Da radę to jakoś naprawić czy muszę się prosić admina żeby to naprawił?
ghost1511
Interpreter nie zadziała poprawnie. Utwórz sobie plik z Twoim kodem i otwórz go w dowolnej przeglądarce. Otrzymasz błąd w miejscu ampersandu.
apek
zauważyłem że kod xml jest poprawny jeśli w chrome kliknę "zobacz źródło" wtedy zamist & jest &amp;

tylko że jak załadować xml przez php żeby działało?
Pyton_000
Spróbuj przez XMLReader
timon27
Też miałem taki problem.
Usunąłem go po prostu naprawiając plik przed wczytaniem smile.gif
  1. $dane=str_replace('&','&amp;',filegetcontents('test.xml'));
  2. fwrite(fopen('test.xml','w'),$dane);
Crozin
@timon27: Takie "naprawianie" może całkiem mocno popsuć dane w XML-u.
@apek:
1. Pokaż dokładną zawartość pliku XML (tylko używaj tagów BBCode [ xml ] ... [ /xml ]). Jeżeli ampersandy nie są poprawnie zapisane (jako &amp;) skontaktuj się z twórcą tego API, by to poprawił.
2. Włącz raportowanie błędów oraz sprawdź czy libxml nie wywalił jakiś dodatkowych: http://www.php.net/manual/en/simplexml.examples-errors.php
apek
Napisałem do nich i odpowiedzieli że wszystko w porządku z XML. W źródle tego xmla jest faktycznie & więc myślę że trzeba odpowiednio wczytać te dane, ale nie mam pojęcia jak.

Tak to wygląda jak wchodze przez chroma: http://cl.ly/TYli

A jak klikam "wyświetl źródło" to: http://cl.ly/TYXV

nospor
Raz piszesz, ze w zrodle sa & a dwie linijki nizej podajesz zrodlo, i widac ze tam jednak jest &amp; Naprawde nie rozrozniasz tych dwoch rzeczy?questionmark.gif

Kod co podales w pierwszym poscie jest ok. Dla danych ktore tu pokazales dziala jaka najbardziej ok. Wyswietla sie wszystko co chcesz. W czym wiec problem?
Crozin
1. Nie interesuje Cię jak wyświetla to Chrome, interesuje Cię tylko i wyłącznie to co faktycznie zawiera plik, czyli jego źródła. A zawiera poprawny XML.
2. W takim razie musisz mieć jakieś błędy. Włącz raportowanie wszystkiego co się da (http://stackoverflow.com/a/6575502/252591) oraz ręcznie upewnij się, że libxml niczego nie rzuca (http://www.php.net/manual/en/simplexml.examples-errors.php). Pokaż też wynik var_dumpa (zamiast echo) dla każdej zmiennej.
nospor
Przyszla mi do glowy jeszcze jedna rzecz:
$offers = simplexml_load_file('test.xml');
tu widac, ze plik pobierasz z dysku, a api to raczej powinienes pobierac ze strony a nie od siebie z dysku. Pewnie wiec pobierasz api ze strony, zapisujesz na dysku, i podczas tego zapisu cos zle robisz i zapisujesz &amp; na &.
Moge sie mylic, bo nie napisales skad te chrome co nam pokazujesz pobiera tego xml. Czy z dysku czy ze strony smile.gif
apek
Wiecie co? Chyba jednak coś było wcześniej nie tak z tym XML'em bo teraz wszystko działa jak należy. Myślę, że kiedy do nich napisałem coś zmienieli. Kod taki sam jak w pierwszym poscie i normalnie mi ładuje wszyskie dane.
Dzięki wszystkim za pomoc.
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.