我应该使用什么xPath来显示请求的数据?

时间:2011-03-25 00:44:39

标签: php dom xpath

我使用以下脚本来获取RSS标题和RSS提要的内容。它的结构是:(我想我没有犯任何错误)

<div id="feedBody">
<div id="feedContent">
<div class="entry">
<h3>TITLE OF POST</h3>
<div base="http://feeds.feedburner.com/blogspot/hyMBI" 
     class="feedEntryContent"
    > CONTENT OF POST </div>
</div>
</div>
</div>




<?php
$dom = new DOMDocument;
libxml_use_internal_errors(TRUE);
$dom->loadHTMLFile('http://feeds.feedburner.com/blogspot/hyMBI');
libxml_clear_errors();

$xPath = new DOMXPath($dom);
$links = $xPath->query('????????????????');
foreach($links as $link) {
    printf("%s \n", $link->nodeValue);
}
?>

我应该使用什么xPath来获取数据?有没有办法让他们分开? 万分感谢,希望这是我对项目的最后一个问题...

2 个答案:

答案 0 :(得分:0)

首先,您应该使用load加载XML,而不是loadHTMLFile

根据您的变量名称“$ links”判断,我猜您想要<link>元素中的<item>元素的值。因此,构造一个xpath查询,其中只说://item/link

答案 1 :(得分:0)

基本XPath://div[@class="entry"]为您提供所有条目的数组。您可以使用//div[@class="entry"][1]获取第一个(或唯一)条目。有了它,您可以使用h3来获取标题节点的文本,并使用div[1]来获取内容(如果它保证只有一个,否则指定类)。

如果您愿意,可以像//div[@class="entry"][1]/h3一样将它们放在一起,这样您只需查询根节点即可。否则,将新节点保存为下一个查询,例如:

$entries = $xPath->query('//div[@class="entry"][1]');
foreach($entry in $entries) {
  $title = $xPath->evaluate('h3[1]',$entry);
  $post = $xPath->evaluate('div[1]',$entry);
}

如果你的RSS返回了一组帖子,你可以不用第一个[1]并以这种方式遍历整个组。