php - 使用 simple-html-dom 获取元素内容

标签 php html simple-html-dom

我正在使用 simpile_html_dom 获取 html 页面元素。 我有一些像这样的 div 元素。我想要的只是在每个 div(不在任何子元素内)中获得“非常感谢”的句子。 我该怎么做?

<div class="right">
<h2>
<a href="">Hello</a>
</h2>
<br/>
<span>How Are You?</span>
<span>How Are You?</span>
<span>How Are You?</span>
Fine Thanks
</div>

最佳答案

应该只是$html->find('div.right > text') ,但这不会起作用,因为简单 HTML DOM 解析器似乎不支持直接后代查询。

所以你必须找到所有 <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;
    }
}

关于php - 使用 simple-html-dom 获取元素内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15942198/

相关文章:

php - 使用 PHP 连接字符串并用逗号分隔

php - 使用不同的操作符获取mysql数据

php - 如何在 HTML 的下拉列表中设置选定值?

javascript - setCustomValidity Bootstrap 保持错误弹出

php - 如何在mysql中按降序获取行?

javascript - 如何让侧边栏不交互?

javascript - 带有变量的复杂 Jquery 选择器

php - 使用 Simple HTML DOM 抓取 HTML 并计算 child 数

php - 使用 Curl get_info 获取 HTML 文件中图像的内容类型

php - 使用简单HTML DOM解析器检索文本节点