从RSS提要[PHP]中提取特定条目

时间:2010-05-23 00:31:10

标签: php xml regex rss preg-match

所以,我有一个RSS源,每个项目都有变化。我想要做的只是获取包含特定文本部分的条目。

例如:

 <item>
    <title>RADIO SHOW - CF64K - 05-20-10 + WRAPUP </title>
    <link>http://linktoradioshow.com</link>
 <comments>Radio show from 05-20-10</comments>
 <pubDate>Thu, 20 May 2010 19:12:12 +0200</pubDate>
 <category domain="http://linktoradioshow.com/browse/199">Audio / Other</category>
 <dc:creator>n0s</dc:creator>
 <guid>http://otherlinktoradioshow.com/</guid>
 <enclosure url="http://linktoradioshow.com/" length="13005" />
 </item>
 <item>
 <title>RADIO SHOW - CF128K - 05-20-10 + WRAPUP </title>
 <link>http://linktoradioshow.com</link>
 <comments>Radio show from 05-20-10</comments>
 <pubDate>Thu, 20 May 2010 19:12:12 +0200</pubDate>
 <category domain="http://linktoradioshow.com/browse/199">Audio / Other</category>
 <dc:creator>n0s</dc:creator>
 <guid>http://otherlinktoradioshow.com/</guid>
 <enclosure url="http://linktoradioshow.com/" length="13005" />
 </item>

我只想显示包含字符串CF64K的结果。虽然它可能是非常简单的正则表达式,但我似乎无法绕过正确的方向。我似乎总是只能显示字符串'CF64K',而不是它周围的东西。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我猜测(因为你向我们展示了你试图解析的数据,而不是你试图解析它的代码),问题是你试图用正则表达式解析XML。不,它不适合它。

使用RSS解析器。使用它提供的API遍历条目。检查它们是否符合您的要求(使用简单的字符串匹配,而不是正则表达式)。处理那些执行的操作,然后跳回到循环的顶部,以便那些不执行操作。

答案 1 :(得分:1)

如果你需要的是一个简单的子串匹配,那么你可以使用XPath:

$rss = simplexml_load_file($url);
foreach ($rss->xpath('//item[contains(title, "CF64K")]') as $item)
{
    print_r($item);
}

否则,你可以循环遍历这些项目并手动过滤它们

$rss = simplexml_load_file($url);
foreach ($rss->xpath('//item') as $item)
{
    if (!preg_match('#CF64K#i', $item->title))
    {
        continue;
    }
    print_r($item);
}