それは単に$html->find('div.right > text')
にする必要がありますが、単純なHTML DOMパーサは、直系の子孫クエリをサポートしていないようなので、それは動作しません。
まず、<div>
の要素をすべて見つけて、子ノードでテキストノードを検索する必要があります。残念ながら、->childNodes()
メソッドは->children()
にマップされているため、要素のみが返されます。
解決策は、各<div>
要素の->find('text')
を呼び出してから、親ノードに基づいて結果をフィルタリングすることです。
DOMDocument
を使用して
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;
}
}
}
、この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;
}
}
あなたはすべてのコードを試してみましたか? –
divに挿入したいのですか? – liyakat
2つ以上のdiv要素を投稿できますか?またはそれが投稿されたdiv要素のように繰り返されるかどうか? –