我从RSS获得了一些信息。
<?php
$dom = new DOMDocument;
libxml_use_internal_errors(TRUE);
$dom->load('http://www.myrss.com');
libxml_clear_errors();
$xPath = new DOMXPath($dom);
$links = $xPath->query('xxxxx');
foreach($links as $link) {
printf("%s \n", $link->nodeValue);
}
?>
我已设法通过//item/title
获取标题,链接和说明,依此类推,我希望如何分离文字内容和描述图片。
正如我可以使用firefox查看页面源代码,这是我看到的图像和内容的代码。两者都在<description></description>
图片
<div class="separator" style="clear: both; text-align: center;"><a href="LINK TO IMAGE" imageanchor="1"
style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="192"
src="LINK TO IMAGE" width="320" /></a></div>
内容文字
<span class="Apple-style-span" style="font-family: 'Trebuchet MS', sans-serif;"> CONTENT TEXT IS HERE </span>
我应该使用什么xPath来获取这些数据?谢谢
答案 0 :(得分:0)
您的代码格式不正确,因此其他人很难对其进行处理。
但是,此处的交互式工具:http://www.bubasoft.net/(XPath Builder)在构建XPath查询时非常有用。
答案 1 :(得分:0)
看起来内容已编码/转义,因此您无法使用Xpath查询它,因为它不是HTML / XML。 Take at htmlentities and html_entity_decode
您应该提取内容,将其转换为HTML / XML并将其单独加载到DOM文档中。然后你可以使用Xpath查询它。
答案 2 :(得分:0)
如果它看起来像并且内容是HTML编码的,则不能一步完成。您必须检索每个描述文本并解析为自己的DOM (除非您想使用正则表达式,我强烈反对)。
如有疑问,您可以先通过Tidy。 DOMDocument
有loadHTML()
,非常有弹性,但无法保证它可以加载任何 HTML。
// beware, this is untested. it should give you an idea, though.
$dom = new DOMDocument;
libxml_use_internal_errors(TRUE);
$dom->load('http://www.myrss.com');
libxml_clear_errors();
$xPath = new DOMXPath($dom);
$items = $xPath->query('/rss/channel/item');
foreach($items as $item) {
$descr = $xPath->query('./description', $item);
// there should be at most one, but foreach gracefully
// handles the case where there is no <description>
foreach ($descr as $d) {
$temp_dom = new DOMDocument();
$temp_dom->loadHTML( $d->nodeValue ); // error handling/Tidy here!
$temp_xpath = new DOMXPath($temp_dom);
$img = $temp_xpath->query('//img');
$txt = $temp_xpath->query('//span[@class="Apple-style-span"]');
// now do something with $img and $txt
}
}