【问题标题】:XML RSS image displaying in PHP在 PHP 中显示的 XML RSS 图像
【发布时间】:2017-11-10 03:39:12
【问题描述】:

我试图从 RSS 链接中提取图像 URL。

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

图片中有一个标签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;

但这给了我这个错误:

第 24 行是我尝试过的行。但我也尝试使用.attribute(url),但这也没有返回任何东西。

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

提前致谢,祝您编码愉快。

【问题讨论】:

  • 为了完整起见,您是否可以发布 XML 的实际文本代码 sn-p,而不是图像(当然下次您发布另一个问题时)?它使想要帮助您的人更容易创建快速测试。提前致谢!

标签: php xml dom rss rss-reader


【解决方案1】:

XML 中元素的media: 部分称为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> 元素,无论它们位于哪个命名空间中。

但是,在您显示的示例 XML1 中,<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) 请下次发布实际的示例 XML 代码,而不是图片。

【讨论】:

  • 不存在更完美的答案。谢谢你成功了。也感谢你解释我做错了什么!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-23
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 2015-04-11
相关资源
最近更新 更多