0
我试图使用xpath和domdocument在html页面中获取div的内容。这是页面的结构:PHP:使用xpath()获取html页面中的内容
<div id="content">
<div class="div1"></div>
<span class="span1></span>
<p></p>
<p></p>
<p></p>
<p></p>
<p></p>
<div class="div2"></div>
</div>
我只想得到p的内容,而不是跨度和div。我通过这个xpath表达式.//*[@id='content']/p但是猜测某事不对,因为我只得到第一个p。尝试使用其他表达式与以下兄弟和节点(),但都只返回第一个p。
.//*[@id='content']/span/following-sibling::p
.//*[@id='content']/node()[self::p]
这是怎样的二手的XPath:
$domDocument=new DOMDocument();
$domDocument->encoding = 'UFT8';
$domDocument->loadHTML($page);
$domXPath = new DOMXPath($domDocument);
$domNodeList = $domXPath->query($this->xpath);
$content = $this->GetHTMLFromDom($domNodeList);
这也是我如何让HTML代码节点:
private function GetHTMLFromDom($domNodeList){
$domDocument = new DOMDocument();
$node = $domNodeList->item(0);
foreach($node->childNodes as $childNode)
$domDocument->appendChild($domDocument->importNode($childNode, true));
return $domDocument->saveHTML();
}
@Alejandro:谢谢你的答案,但// DIV [@ ID = '内容']/P 不要对我的作品,我只得到了firts页。 – Luciano 2010-10-14 18:49:13
@Luciano:然后问题出在你的代码中的其他地方。尝试查询后:'echo $ domNodeList-> length' – 2010-10-14 19:15:13
@Alejandro:节点数是正确的,但我仍然只得到第一个p。它可能是由tidy()函数给出的错误。我用curl得到了页面的内容,但后来我用$ tidy-> parseString($ curl_res)解析它; $ tidy-> cleanRepair(); return $ tidy; 最后我把这个值作为$ page发送给domdocument。 – Luciano 2010-10-15 11:24:42