Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php/xpath查询:如何获取可能有嵌套div的div的内容?_Php_Html_Xpath - Fatal编程技术网

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

php/xpath查询:如何获取可能有嵌套div的div的内容?,php,html,xpath,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="'.$classnam

我试图创建一个函数,返回一个具有特殊类名的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; 

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

return $result->item(0);

将仅返回第一个匹配的节点。要获取内容,您可以使用
$result->item(0)->nodeValue
,它的作用相当于.innerHTML。

我尝试了这个方法,但我得到了以下错误:致命错误:无法使用DOMNodeList类型的对象作为数组,这是引发它的代码
var\u dump($result[0]->nodeValue)
nodeValue
innerHTML
完全不同。是的,我刚刚发现。我没有得到源代码,似乎我只得到div中的可见文本:>我可以使用什么