如何获取 RSS 提要的特定于 iTunes 的子节点?
How to get iTunes-specific child nodes of RSS feeds?
我正在尝试使用 PHP 处理 an RSS feed,并且有一些标签需要处理,例如 'itunes:image'
。我正在使用的代码如下,由于某些原因,这些元素没有返回任何值。输出长度为 0.
如何读取这些标签并获取它们的属性?
$f = $_REQUEST['feed'];
$feed = new DOMDocument();
$feed->load($f);
$items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');
foreach($items as $key => $item)
{
$title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$pubDate = $item->getElementsByTagName('pubDate')->item(0)->firstChild->nodeValue;
$description = $item->getElementsByTagName('description')->item(0)->textContent; // textContent
$arrt = $item->getElementsByTagName('itunes:image');
print_r($arrt);
}
getElementsByTagName
由DOM指定,PHP紧随其后。它不考虑名称空间。相反,使用 getElementsByTagNameNS
,它需要完整的命名空间 URI(而不是前缀)。这个appears to behttp://www.itunes.com/dtds/podcast-1.0.dtd
*。所以:
$img = $item->getElementsByTagNameNS('http://www.itunes.com/dtds/podcast-1.0.dtd', 'image');
// Set preemptive fallback, then set value if check passes
urlImage = '';
if ($img) {
$urlImage = $img->getAttribute('href');
}
或者把命名空间放在常量中。
您可以通过简单地删除前缀并获取具有 getElementsByTagName
.
的任何命名空间的所有 image
标签来逃脱惩罚
确保检查给定项目是否有 itunes:image
元素(现在给出示例);在示例播客中,有些没有,我怀疑这也给你带来了麻烦。 (如果没有 href
属性,getAttribute
将 return 根据 DOM 规范 null
或空字符串而不会出错。)
*如果您想知道,该位置并没有托管实际的 DTD 文件,而且已经有大约十年没有了。
<?php
$rss_feed = simplexml_load_file("url link");
if(!empty($rss_feed)) {
$i=0;
foreach ($rss_feed->channel->item as $feed_item) {
?>
<?php echo $rss_feed->children('itunes', true)->image->attributes()->href;?>
<?php
}
?>
我正在尝试使用 PHP 处理 an RSS feed,并且有一些标签需要处理,例如 'itunes:image'
。我正在使用的代码如下,由于某些原因,这些元素没有返回任何值。输出长度为 0.
如何读取这些标签并获取它们的属性?
$f = $_REQUEST['feed'];
$feed = new DOMDocument();
$feed->load($f);
$items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');
foreach($items as $key => $item)
{
$title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$pubDate = $item->getElementsByTagName('pubDate')->item(0)->firstChild->nodeValue;
$description = $item->getElementsByTagName('description')->item(0)->textContent; // textContent
$arrt = $item->getElementsByTagName('itunes:image');
print_r($arrt);
}
getElementsByTagName
由DOM指定,PHP紧随其后。它不考虑名称空间。相反,使用 getElementsByTagNameNS
,它需要完整的命名空间 URI(而不是前缀)。这个appears to behttp://www.itunes.com/dtds/podcast-1.0.dtd
*。所以:
$img = $item->getElementsByTagNameNS('http://www.itunes.com/dtds/podcast-1.0.dtd', 'image');
// Set preemptive fallback, then set value if check passes
urlImage = '';
if ($img) {
$urlImage = $img->getAttribute('href');
}
或者把命名空间放在常量中。
您可以通过简单地删除前缀并获取具有 getElementsByTagName
.
image
标签来逃脱惩罚
确保检查给定项目是否有 itunes:image
元素(现在给出示例);在示例播客中,有些没有,我怀疑这也给你带来了麻烦。 (如果没有 href
属性,getAttribute
将 return 根据 DOM 规范 null
或空字符串而不会出错。)
*如果您想知道,该位置并没有托管实际的 DTD 文件,而且已经有大约十年没有了。
<?php
$rss_feed = simplexml_load_file("url link");
if(!empty($rss_feed)) {
$i=0;
foreach ($rss_feed->channel->item as $feed_item) {
?>
<?php echo $rss_feed->children('itunes', true)->image->attributes()->href;?>
<?php
}
?>