在PHP中显示XML RSS图像

时间:2017-06-08 12:10:40

标签: php xml dom rss rss-reader

我试图从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 个答案:

答案 0 :(得分:1)

The media: part on elements in your XML, is called a namespace prefix,在客户端浏览器请求中添加授权标头,并表示名称空间URI。您应该能够在xmlns:media元素的祖先之一上找到此URI作为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中,您显示了 1 <media:thumbnail>元素没有任何子节点,因此上面调整的代码示例仍然会失败。

最后,.attribute(url)只是无效的语法。当然应该是->getAttribute('url')

因此,要将其包装起来,您应该能够获得特定命名空间的第一个url的{​​{1}}属性:

<thumbnail>

或:

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

如果你不关心元素的命名空间。

1)请在下次发布实际的示例XML代码,而不是图像。