【问题标题】:How to get iTunes-specific child nodes of RSS feeds?如何获取 RSS 提要的 iTunes 特定子节点?
【发布时间】:2016-04-05 20:25:31
【问题描述】:

我正在尝试使用 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);
}

【问题讨论】:

    标签: php rss itunes


    【解决方案1】:

    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 将根据 DOM 规范返回 null 或空字符串而不会出错。)

    *如果您想知道,该位置并没有托管实际的 DTD 文件,而且已经有大约十年了。

    【讨论】:

    • 这可行,但有一个小问题,我怎样才能获得这样的元素的属性,下面会抛出一个错误 $item->getElementsByTagNameNS($itunes, 'image')-> item(0)->getAttribute('href');
    • @rksh:嗯。我正在调查。
    • @rksh:您有正在处理的特定 RSS 文件的示例吗?我有一个可能匹配也可能不够匹配。
    • 这是我当前的代码给我带来了麻烦,我找不到错误但它给了我一个错误 500 页面似乎没有加载pastie.org/private/tjelmqlivrjhd0oin1zl3q
    • @rksh:好的,看起来你没有检查没有itunes:image 元素的items,而这些导致代码阻塞。
    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    相关资源
    最近更新 更多