php / xpath查询:如何获取div的内容,可能有嵌套的div?

时间:2011-09-21 20:10:44

标签: php html xpath

我试图创建一个返回带有特定类名的div的内部HTML的函数。 我四处搜索,人们似乎都说xpath查询是要走的路。 这就是我得到的:

function getDivContent($html, $classname) {
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$result = $xpath->query('//div[class="'.$classname.'"]');
return $result;
}

但它只返回:

object(DOMNodeList)#3 (0) { }

任何人都可以发现错误吗?

编辑:解决方案:

function nodeContent($n, $outer=false) { 
    $d = new DOMDocument('1.0'); 
    $b = $d->importNode($n->cloneNode(true),true); 
    $d->appendChild($b); $h = $d->saveHTML(); 
    // remove outter tags 
    if (!$outer) $h = substr($h,strpos($h,'>')+1,-(strlen($n->nodeName)+4)); 
    return $h; 
} 

function getDivContentByClass($html, $class) {
    $query = "//div[@class='$class']";
    $dom = new DOMDocument();
    @$dom->loadHTML($html);
    $xpath = new DOMXPath($dom);
    $result = $xpath->query($query);
    $data = nodeContent($result->item(0));
    return $data; 

}

1 个答案:

答案 0 :(得分:0)

xpath的查询函数返回一个NODEList,它本质上是一个结果数组,即使只有一个匹配的节点。

return $result->item(0);

将仅返回第一个匹配节点。要获取内容,您可以使用$result->item(0)->nodeValue,其行为与.innerHTML等效。