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 代码,而不是图像。
我正在尝试从 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 代码,而不是图像。