0
<div class="date">
  <div class="rating">good</div>
  Movie Review - Mar 24, 2013
</div>

<div class="date">
  Movie Review - Mar 23, 2013
</div>

評価 div コンテンツなしで "Movie Review .." 部分を取得する xpath クエリはどれですか (それが良いと言っている場所)。評価部門が存在する場合と存在しない場合があります。

divノードを取得するときに、この種のことを試しました$reviewnode:

  $thedate = $xpath->query('text()[1]',$reviewdate)->item(0) ;

しかし、評価 div の内容もキャッチします。

解析されたドキュメントは html5 です。

4

2 に答える 2

0

空白のみのノードではない最初の text-node 子を探しています。

// 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"

これがお役に立てば幸いです。オンライン デモと完全なコード例も参照してください。

<?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);
}
于 2013-04-08T11:41:17.880 に答える