2010-01-20 10 views
5

Wieczorne chłopaki.PHP namespace simplexml problems

Po pierwsze, aby powiedzieć, przeczytałem How do I parse XML containing custom namespaces using SimpleXML?.

Parsuję dokument XML ze źródła, a nie z pamięci, i używają niestandardowego obszaru nazw.

<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0" xmlns:moshtix="http://www.moshtix.com.au"> 
    <channel> 
    <item> 
    <link>qweqwe</link> 
    <moshtix:genre>asdasd</moshtix:genre> 
... 

Na przykład. Kiedy parsuję używając SimpleXML, żaden z elementów mostix: namespace nie jest widoczny lub dostępny. Prawdopodobnie naprawdę proste rozwiązanie, ale jakieś pomysły facetów?

Odpowiedz

6

Zazwyczaj ludzie używają children().

$rss = simplexml_load_string(
    '<?xml version="1.0" encoding="utf-8"?> 
    <rss version="2.0" xmlns:moshtix="http://www.moshtix.com.au"> 
     <channel> 
      <link>qweqwe</link> 
      <moshtix:genre>asdasd</moshtix:genre> 
     </channel> 
    </rss>' 
); 

foreach ($rss->channel as $channel) 
{ 
    echo 'link: ', $channel->link, "\n"; 
    echo 'genre: ', $channel->children('moshtix', true)->genre, "\n"; 
} 
+0

Mimo, że pracuje dla ekstraktu każdy element, który jest pomocny, sporo czasu muszę wykonać json_encode i po prostu zbierać każdą poszczególną ważny element i zapisać je w bazie danych. Ale kiedy to zrobię, nie rozpoznaje niestandardowych elementów przestrzeni nazw. Jakieś pomysły? Dane wewnątrz każdego różnią się zbytnio, aby ręcznie umieścić je w każdym. – James

+0

Udało mi się to naprawić za pomocą kilku przeglądów foreach przez każdy element;) – James

+1

To zawsze trochę mnie przeraża, gdy ludzie mówią, że konwertują XML na JSON, nie chcąc dbać o strukturę. Dlaczego nie zapisać go jako, dobrze, XML? – IMSoP