2011-09-21 138 views
0

即時嘗試做一個函數,返回一個div的內部HTML與一個特定的類名。 我周圍搜索和人們似乎說xpath查詢是要走的路。 這就是我的了:php/xpath查詢:如何獲取div的內容,可能嵌套的div?

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; 

}

回答

0

XPath的查詢函數返回一個節點列表,這基本上是其結果的陣列,即使只是一個單一的匹配節點。

return $result->item(0); 

將僅返回第一個匹配節點。要獲取內容,您可以使用$result->item(0)->nodeValue,它等同於.innerHTML。

+0

我試過這個,但是我得到這個錯誤:致命錯誤:不能使用DOMNodeList類型的對象作爲數組,並且這是引發它的代碼'var_dump($ result [0] - > nodeValue);' –

+0

Doh,right 。抱歉。我的錯。我編輯了答案。 –

+1

'nodeValue'根本不等同於'innerHTML'。 – salathe