2013-01-17 45 views
1

我有一些RSS看起來像這樣:解析RSS/XML PHP中的命名空間

<item> 
<guid isPermaLink="false">2284767032</guid> 
<title>title goes here...</title> 
<description> Description </description> 
<author>author name</author> 
<dcterms:valid>start=2012-09-28T17:06:00Z;scheme=W3C-DTF</dcterms:valid> 
<media:category scheme="" label="">cat1</media:category> 
<media:category scheme="" label="">cat2</media:category> 
<media:category scheme="" label="">cat3</media:category> 

<media:copyright>Big Company</media:copyright> 
<media:keywords>some;keywords;</media:keywords> 
<media:group> 
<media:content bitrate="643.386" medium="video" duration="72.144" expression="full" fileSize="5802051" framerate="29.97" type="video/x-flv" height="360" url="..." width="640"/> 
<media:content bitrate="1242.571" medium="video" duration="72.144" expression="full" fileSize="11205501" framerate="29.97" type="video/x-flv" height="480" url="..." width="854"/> 
</media:group> 
<link>a234dfasf4f</link> 
<plmedia:defaultThumbnailUrl> 
    http://url.jpg 
</plmedia:defaultThumbnailUrl> 
</item> 

我用下面的代碼來分析它:

$feed = simplexml_load_file('http://feedurl.com'); 
    echo "<pre>"; 
    print_r($feed); 
    echo "</pre>"; 

的問題是,我「M讓所有的標籤,如GUID,標題和描述,但沒有一個media:categorymedia:groupsomething:anything顯示出來 - 他們只是剝離出來。

我如何解析,而不會丟失他們這種飼料?

回答

0

你需要找到的命名空間的定義,並找到該命名空間映射到的字符串。因此,舉例來說,如果media命名空間映射到http://example.com/something

echo (string)$feed->children('http://example.com/something')->copyright; 

輸出:

大公司

print_r()用SimpleXML結果並不總是給你完整的結構,但元素在那裏。

要獲得嵌套的元素,你可以試試:

foreach($feed->children('http://example.com/something')->group->children('http://example.com/something')->content as $content) 
{ 
    echo (string)$content->attributes()->bitrate; 
} 
+0

那是要在RSS文檔的頁眉? – wesbos

+0

@Wes是它通常是,例如:''這是的定義'itunes'命名空間,定義爲'http:// www.itunes.com/dtds/podcast-1.0.dtd'。 – MrCode

+0

好了,反正是有他們全部合併到大的對象/陣列上? – wesbos