XML RSS 图片显示在 PHP

XML RSS image displaying in PHP

我正在尝试从 RSS link 中提取图像 URL。

这是其中一件物品的图片。

图中有一个标签media:thumbnail

我用这个作为标题,link 和描述:

$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;

但这给了我这个错误:

第24行是我试过的那一行。但我也尝试过使用 .attribute(url) 但这也没有 return 一件事。

我希望有人能帮我解决这个问题,我遇到这个问题已经 4 个小时了,但经过大量尝试和错误后,我一次也没有得到 URL。

提前致谢,祝编码愉快。

XML 中元素的 media: 部分称为 namespace prefix 并表示命名空间 URI。您应该能够找到此 URI 作为 media: 元素祖先之一的 xmlns:media 属性的值。如果找不到,您应该能够在元素本身上使用 xmlns 属性的 URI 值(如果适用,在本例中为 ) .

为了从某个命名空间获取某些元素,您应该使用该命名空间的 URI 并调用 DOMDocument::getElementsByTagNameNS() instead of 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')

因此,总而言之,您应该能够通过以下方式获取特定命名空间的第一个 <thumbnail>url 属性:

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

或:

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

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


1) 下次请 post 实际示例 XML 代码,而不是图像。