単純なはずです$html->find('div.right > text')
が、Simple HTML DOM Parser は直接の子孫クエリをサポートしていないように見えるため、うまくいきません。
したがって、最初にすべての要素を見つけて<div>
、子ノードでテキスト ノードを検索する必要があります。残念ながら、->childNodes()
メソッドはにマップされているため->children()
、要素のみを返します。
->find('text')
実際の解決策は、各要素を呼び出す<div>
ことです。その後、親ノードに基づいて結果をフィルタリングします。
foreach ($doc->find('div.right') as $parent) {
foreach ($parent->find('text') as $node) {
if ($node->parent() === $parent && strlen($t = trim($node->plaintext))) {
echo $t, PHP_EOL;
}
}
}
を使用するDOMDocument
と、この XPath 式は苦労せずに同じ作業を行います。
$doc = new DOMDocument;
$doc->loadHTML($content);
$xp = new DOMXPath($doc);
foreach ($xp->query('//div/text()') as $node) {
if (strlen($t = trim($node->textContent))) {
echo $t, PHP_EOL;
}
}