私が思ったそれぞれの結果は同じ行にあるはずです。ただし、class = "title"ごとに、BRが検出されるたびに結果が別の配列行に分割されます。結果はすべて同じ行にあるはずです。
[html]
<td class="title">
<a href="http://boguslink">bogus title</a>....<br>
here is some text
</td>
[php]
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$result = $xpath->query('//td[@class="title"]/text()');
foreach ($result as $result_row)
{
echo $i.":".$result_row->nodeValue."<br />";
$i++;
}
[出力]
0: ....
1: here is some text
出力が必要な場合
[出力]
0: ....here is some text
これはバグですか?そうでない場合は、class = "title"の結果が別々の行に分割されないようにし、同時に上記のようにコードを高速に保つにはどうすればよいですか?
編集:
/ text()のバグや動作ではありません。xpath式から/text()を削除するだけで、そのクラスのすべての内部テキストを取得できます。この時点でリンクテキストを除外する方法を理解しようとしているだけなので、「....ここにいくつかのテキストがあります」しか表示されません。
したがって、リンクテキストを除外する式が必要です。最初に失敗した試行はです。
//td[@class="title"][not(a)]
//td[@class="title"][not(self::a)]
//td[@class="title"][not(@href)]