你正在尋找不是僅限空白節點的第一個文本節點子節點:
// xpath: text()[normalize-space(.)][1]
$thedate = $xpath->query(
'text()[normalize-space(.)][1]', $reviewdate
)->item(0);
結果(var_dump($thedate->data)
):
string(39) "\n Movie Review - Mar 24, 2013\n "
string(39) "\n Movie Review - Mar 23, 2013\n "
此外,你正在尋找一個值,你可能想直接檢索字符串值:
// xpath: normalize-space(text()[normalize-space(.)])
$thedate = $xpath->evaluate(
'normalize-space(text()[normalize-space(.)])', $reviewdate
);
結果(var_dump($thedate)
):
string(27) "Movie Review - Mar 24, 2013"
string(27) "Movie Review - Mar 23, 2013"
我希望這是有幫助的。請參閱Online Demo以及完整的代碼示例:
<?php
/**
* how can I get the text data of a div without the child divs text data - with php xpath?
*
* @link http://stackoverflow.com/q/15838487/367456
* @link http://eval.in/15474
*/
$buffer = <<<BUFFER
<html>
<div class="date">
<div class="rating">good</div>
Movie Review - Mar 24, 2013
</div>
<div class="date">
Movie Review - Mar 23, 2013
</div>
</html>
BUFFER;
$doc = new DOMDocument();
$doc->loadHTML($buffer);
$xpath = new DOMXPath($doc);
foreach ($xpath->query('/*/body/div[@class = "date"]') as $reviewdate) {
$thedate = $xpath->query('text()[normalize-space(.)][1]', $reviewdate)->item(0);
var_dump($thedate->data);
// string:
$thedate = $xpath->evaluate('normalize-space(text()[normalize-space(.)])', $reviewdate);
var_dump($thedate);
}
我不知道如何有時捕捉評分div。您可能想要檢查如何獲取所有'$ reviewdate'上下文節點。 – hakre 2013-04-08 11:46:57