如何在RSS中从CDATA获取<img/> src?

时间:2012-01-12 16:41:32

标签: php rss magpie

我正在用Magpie从RSS feed中获取数据 $rss[description]包含带有html元素的CDATA:

<![CDATA[  
<div>  
 <a href='url'>  
  <img src='img_url' alt='aaa' title='bbb' border='0' width='116' height='116'>  
 </a>  
</div>]]>  
Some other text  

如何从中获取“img_url”? preg_match()是唯一的方法吗?也许我可以使用simpleXML?

3 个答案:

答案 0 :(得分:0)

CDATA你有一个包含HTML的字符串。因此,首先将其视为文本,但由于此文本旨在包含HTML,因此使用适用于解析HTML的解决方案来解析此文本。

换句话说:为作业使用适当的工具(HTML解析器)(解析HTML)

已经有用于在PHP中解析HTML的现有解决方案 - 例如。看到这个问题的答案:

  1. How to parse and process HTML with PHP?
  2. Robust, Mature HTML Parser for PHP
  3. 因此,基本上,您已经能够从XML中获取HTML字符串。现在解析HTML并使用上面提到的一些解决方案获取图像源。

    使用preg_match()解析HTML并不是一个好主意,因为要完成HTML解析器适合的简单操作需要非常复杂。

答案 1 :(得分:0)

您最好不要使用可以使用适当工具的正则表达式。我想到的东西(尽管可能更容易):

$descr = $rss[description]; // String. You have extracted description part from your feed

$dom = new DOMDocument();
$dom->loadHTML($descr); // or you can use loadXML
if (!$dom) {
    die('Error loading HTML string.');
}

$xml = simplexml_import_dom($dom);
$imgSrc = (string)$xml->body->div->a->img['src'];

我们走了。根据您的示例,CDATA $imgSrc将等于img_url

答案 2 :(得分:-1)

是的,你应该使用正则表达式,CDATA意味着数据应该被视为普通的字符串而不用解析,所以你应该把它当作一个字符串...