我正在使用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?
CDATA
是一个包含HTML的字符串。所以,首先将其视为文本,但由于该文本旨在包含HTML,所以使用适合解析HTML的解决方案来解析该文本。
换句话说:为作业(解析HTML)使用适当的工具(HTML解析器)。
已经有在PHP中解析HTML的现有解决方案-例如,请参阅以下问题的答案:
- 如何使用PHP解析和处理HTML
- 健壮、成熟的PHP HTML解析器
因此,基本上,您已经能够从XML中获取HTML字符串了。现在,使用上面提到的一些解决方案解析HTML并获取图像源。
使用preg_match()
解析HTML不是一个好主意,因为它需要非常复杂才能完成HTML解析器适合的简单操作。
在可以使用适当工具的地方,最好不要使用正则表达式。我脑海中浮现的东西(尽管也许可以做得更容易):
$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
。
是的,您应该使用regex,CDATA意味着数据应该被视为正常字符串而不进行解析,所以您应该将其视为字符串。。