1

我正在使用 Magpie 从 RSS 提要中获取数据。
$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?

4

3 回答 3

0

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

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

已经存在用于在 PHP 中解析 HTML 的解决方案- 例如。查看此问题的答案:

  1. 如何用 PHP 解析和处理 HTML?
  2. 用于 PHP 的强大、成熟的 HTML 解析器

因此,基本上,您已经能够从 XML 中获取 HTML 字符串。现在使用上面提到的一些解决方案解析 HTML 并获取图像的来源。

用于解析preg_match()HTML 不是一个好主意,因为它需要非常复杂才能完成 HTML 解析器适合的简单事情。

于 2012-01-15T19:34:55.407 回答
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.

于 2012-01-15T20:06:21.877 回答
-1

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

于 2012-01-12T16:45:26.667 回答