它应该是$html->find('div.right > text')
simple ,但这不起作用,因为 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;
}
}