2017-06-08 474 views
1

我試圖從RSS鏈接中提取圖像URL。在PHP中顯示XML RSS圖像

這裏是其中一個項目的圖像。

enter image description here

在圖像有一個標籤media:thumbnail

我用這爲標題,鏈接和描述:

$item_title = $item->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue; 
$item_link = $item->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue; 
$item_desc = $item->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue; 

但是我似乎無法拔出media:thumbnail

我試圖同其他人的

$item_img = $item->getElementsByTagName('media:thumbnail')->item(0)->childNodes->item(0)->nodeValue; 

但是這給了我這個錯誤: enter image description here

第24行是我試過的線。但我也嘗試使用.attribute(url)但這也不會返回一個東西。

我希望有人可以幫助我,因爲我得到這個問題已經4個小時了,但經過大量的嘗試和錯誤之後,我沒有一次回到URL。

在此先感謝,並快樂編碼。

+1

爲了完整起見,您可能會張貼XML的實際文本代碼片段,而不是圖片(當然下次您發佈另一個問題時)?它使得想要幫助你的人更容易創建一個快速測試。提前致謝! –

回答

1

media:作爲XML中元素的一部分,稱爲namespace prefix並表示一個名稱空間URI。您應該能夠在media:元素的祖先之一中找到此URI作爲xmlns:media屬性的值。如果找不到,應該能夠使用元素本身的xmlns屬性的URI值(如果適用,在這種情況下它的值爲)。

爲了從某一個命名空間獲取某些元素,那麼你應該使用該命名空間的URI,並呼籲DOMDocument::getElementsByTagNameNS()代替DOMDocument::getElementsByTagName(),就像這樣:

$item_img = $item->getElementsByTagNameNS('the namespace URI you found','thumbnail') 
       ->item(0) 
       ->childNodes 
       ->item(0)->nodeValue; 

如果你不關心的命名空間的特定元素在你的定義可能只是繼續使用DOMDocument::getElementsByTagName(),但離開了命名空間前綴:

$item_img = $item->getElementsByTagName('thumbnail') 
       ->item(0) 
       ->childNodes 
       ->item(0)->nodeValue; 

要知道,雖然這將獲取所有<thumbnail>元素,不管它們是什麼命名空間英寸

然而,在示例XML,你已經證明,該<media:thumbnail>元素沒有任何子節點,所以你的代碼上面的例子中,我調整仍然會失敗。

最後,.attribute(url)只是無效的語法。當然應該是->getAttribute('url')

所以,把它包起來,你應該能夠得到一個特定的命名空間的第一<thumbnail>url屬性有:如果你不

$item_img = $item->getElementsByTagName('thumbnail') 
       ->item(0)->getAttribute('url'); 

$item_img = $item->getElementsByTagNameNS('the namespace URI you found','thumbnail') 
       ->item(0)->getAttribute('url'); 

或不在乎元素的名稱空間。


1)請張貼實際示例XML代碼接下來的時間,而不是圖像。

+0

更完美的答案不存在。謝謝你的工作。也感謝關於我做錯了什麼的解釋! –