2013-04-10 90 views
1

我試圖從一個輸出XML結構數據的API中獲取數據。從XML獲取和存儲數據

它有很多分支,看起來很複雜。這裏是結構,

<rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0"> 
<channel> 
<item> 
<title>Test Video</title> 
<media:content url="http://localhost/video/test.mp4" type="video/x-flv" duration="6474"/> 
</item> 
</channel> 
</rss> 

我也想知道,如果它有多個分支,如視頻說明,類型..我怎麼能抓住他們?而在媒體標籤裏面它有多個值,我怎樣才能分別得到它們呢?例如:如何獲得內容網址裏面媒體標籤

回答

2

我意識到人們在你的XML(1號線)命名空間,這將這樣的伎倆:

$xml = simplexml_load_string($x); // assuming your XML in $x 
$contents = $xml->xpath("//media:content"); 

foreach ($contents as $content) echo $content['url'],"<br />"; 

見現場演示:http://codepad.viper-7.com/7bJf9Q

替代方案:尋找namespacesimplexml

0

請在php.net上查看simplexmlDOMDocument
這些提供瞭解析XML數據的函數。
<media:content>中的url稱爲屬性,上述函數也提供了拉取屬性的方法。

我建議你嘗試一下我提供的信息,並在需要幫助時返回到SO,好嗎?

玩得開心!

+0

是啊,我不知道這些東西的名字在谷歌搜索,但我張貼了這個問題後,我一直在尋找,我發現一些東西在stackoverflow,好吧@michi,我會評論如果我需要幫助。非常感謝您的時間。 – naveencgr8 2013-04-10 16:03:05

+0

嗨,現在我知道如何抓取數據,但仍然無法做任何與多值屬性,echo $ xml-> channel-> item-> title; - 這工作正常,但回聲$ xml-> channel-> item-> media:content;這不.. .. – naveencgr8 2013-04-10 16:38:14

+0

@ naveencgr8看到我的新答案! – michi 2013-04-10 21:39:49

1

是的,你可以使用SimpleXMl。 <media:content>引用一個名稱空間(http://search.yahoo.com/mrss/)。所以,你可以使用:

$string = <<<XML 
<rss xmlns:media="http://search.yahoo.com/mrss/" version="2.0"> 
<channel> 
<item> 
<title>Test Video</title> 
<media:content url="http://localhost/video/test.mp4" type="video/x-flv" duration="6474"/> 
</item> 
</channel> 
</rss> 
XML; 

$xml = simplexml_load_string($string); 

//var_dump($xml); 
echo $xml->channel->item->title; 
$contentAttr = $xml->channel->item->children('media', true)->content->attributes(); 
echo $contentAttr['url']; 

exit; 

還採取一看Using SimpleXML to read RSS feed