如何使用 dom php 解析器

2024-01-18

我是 PHP 中 DOM 解析的新手:
我有一个正在尝试解析的 HTML 文件。它有一堆这样的 DIV:

<div id="interestingbox"> 
   <div id="interestingdetails" class="txtnormal">
        <div>Content1</div>
        <div>Content2</div>
   </div>
</div>

<div id="interestingbox"> 
......

我正在尝试使用 php 获取许多 div 框的内容。 我如何使用 DOM 解析器来做到这一点?

Thanks!


首先我必须告诉你,你不能在两个不同的 div 上使用相同的 id;有针对这一点的课程。每个元素都应该有一个唯一的 id。

获取 id="interestingbox" 的 div 内容的代码

$html = '
<html>
<head></head>
<body>
<div id="interestingbox"> 
   <div id="interestingdetails" class="txtnormal">
        <div>Content1</div>
        <div>Content2</div>
   </div>
</div>

<div id="interestingbox2"><a href="#">a link</a></div>
</body>
</html>';


$dom_document = new DOMDocument();

$dom_document->loadHTML($html);

//use DOMXpath to navigate the html with the DOM
$dom_xpath = new DOMXpath($dom_document);

// if you want to get the div with id=interestingbox
$elements = $dom_xpath->query("*/div[@id='interestingbox']");

if (!is_null($elements)) {

  foreach ($elements as $element) {
    echo "\n[". $element->nodeName. "]";

    $nodes = $element->childNodes;
    foreach ($nodes as $node) {
      echo $node->nodeValue. "\n";
    }

  }
}

//OUTPUT
[div]  {
        Content1
        Content2
}

类示例:

$html = '
<html>
<head></head>
<body>
<div class="interestingbox"> 
   <div id="interestingdetails" class="txtnormal">
        <div>Content1</div>
        <div>Content2</div>
   </div>
</div>

<div class="interestingbox"><a href="#">a link</a></div>
</body>
</html>';

//the same as before.. just change the xpath

[...]

$elements = $dom_xpath->query("*/div[@class='interestingbox']");

[...]

//OUTPUT
[div]  {
        Content1
        Content2
}

[div]  {
a link
}

请参阅DOMXPath http://us.php.net/manual/en/class.domxpath.php页面了解更多详情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 dom php 解析器 的相关文章

随机推荐

  • SQLAlchemy 在 INSERT ... ON CONFLICT 中“排除”了 PostgreSQL 命名空间

    我找不到通过 SQLAlchemy 执行 PostgreSQL INSERT ON UPDATE 的方法 有没有办法对多行执行操作 一次对整个数据执行操作 我尝试使用 pandas 数据帧中的值进行更新插入 for insert value
  • 在 JSON 结果中定义函数是否有效?

    网站 JSON 响应的一部分包含以下内容 为上下文添加 now function return new Date getTime 向 JSON 添加匿名函数是否有效 我希望每次访问 时间 时都会返回不同的值 No JSON 纯粹是一种数据描
  • Rails 控制器中的自定义操作具有安静的操作?

    我在使用脚手架生成的控制器中创建自己的操作时遇到了一些麻烦 我了解所有内容都映射到宁静的操作 但我正在构建一个用户控制器 用户可以在其中登录 注销等 但是当我创建操作并在 paths rb 中声明它时 当我访问 users login 时
  • 事件 OOPS 实现后的 Python Tkinter

    我对 Python 非常陌生 甚至对哎呀 我想将其转换堆栈溢出 https stackoverflow com questions 12781979 call a function after program has been idle f
  • 使用 MySQL 在表中搜索多边形中的点

    我在 MySQL 5 5 中创建了一个表 municipal border 它包含一些边界 CREATE TABLE municipal border boundary polygon NOT NULL municipalID int 10
  • 如何使用apache poi设置word文档的页边距?

    我想为使用 apache poi 3 9 创建的 Word 文档设置页边距 我发现可以使用CTPageMar but CTPageMar尚未解决 我正在使用 apache poi 3 9 我试过这个 CTSectPr sectPr docu
  • R 如何用图画来遮盖周末时段?

    如何在 r dygraphs 中使用 dyShading 对周末进行着色 我使用下面的代码 但是有一个简单的方法吗 library lubridate library xts library dygraphs dateP lt seq as
  • 如何在与脚本相同的目录中找到 Perl 模块

    现在 Perl 的最新版本已经删除了 来自 INC 我对模块文件位置的最佳实践感到好奇 到目前为止 与我们网站上每个应用程序关联的 pm 文件与脚本位于同一目录中 我认为这会造成安全漏洞 我们没有 INC 中其余目录的写权限 我们可以将 p
  • 设计一个也可以在 O(1) 摊余时间内出队的堆栈?

    我有一个抽象数据类型 可以将其视为从左到右存储的列表 具有以下可能的操作 推送 将新项目添加到列表的左端 Pop 删除列表左端的项目 Pull 删除列表右端的项目 使用三个堆栈和恒定的附加内存来实现此目的 以便任何推入 弹出或拉出操作的摊销
  • 为什么 auto_ptr 被弃用?

    I heard auto ptr在 C 11 中已被弃用 这是什么原因呢 我也想知道之间的区别auto ptr and shared ptr 直接替换为auto ptr http en cppreference com w cpp memo
  • 如何以 clang 格式强制 east const ?

    是否有一个 clang format 标志将 const west 更改为 east const 以便以下内容 void fun const std string s 将被重新格式化为 void fun std string const s
  • Winsock MSG_DONTWAIT 等效项

    在Windows下移植unix C 代码并使用sockets winsock API时 我在server side recv ClientSocket recvbuf recvbuflen MSG DONTWAIT UNIX code 我发
  • 在docker容器中播放框架自动加载

    我正在尝试建立一个开发环境 用于在 docker 容器中开发 play 应用程序 我已经创建了一个安装了 sbt 的映像 然后 我将主机上的项目文件夹作为卷映射到容器 并以交互模式运行 shell docker run v Users jo
  • Github登录用户公开活动

    Github UI UX 最近发生了彻底的变化 在 github 的旧 UI 中 您可以在登录时查看您的公共活动 但在新 UI 中 我似乎找不到可以单击查看我的公共活动的链接 但是当我关注某人时 我可以查看他们的公开活动 这很好 有没有一种
  • android.view.InflateException:二进制 XML 文件行 #30:膨胀类 时出错

    我正在运行一个应用程序 打开时会显示一张地图 上面有一个标记 单击标记后 我尝试打开一个包含某些字段的对话框 这是我的标记点击代码 public boolean onMarkerClick Marker arg0 Log d here Vi
  • 使用 PyLab 从两个单独的列表创建 2D 图形

    这似乎是一个简单答案的基本问题 但无论我如何尝试 我就是无法弄清楚 我正在尝试创建基于两个列表的折线图 对于我的 x 轴 我希望我的列表是一组字符串 x axis list Jan 06 Jul 06 Jan 07 Jul 07 Jan 0
  • 什么是 CA 证书,为什么我们需要它?

    我刚刚读过本文 https web archive org web 20161213142308 https www instantssl com ssl certificate products https html了解什么是HTTPS服
  • Android开源项目中的人脸解锁代码?

    有谁知道人脸解锁代码在android源代码树中的位置吗 我希望在我的应用程序中包含一些面部识别功能 并且很想使用谷歌已经创建的代码 我已经研究过 opencv 和其他一些第三方 API 等替代方案 但我真的只是想看看 google 是如何做
  • 如何在 django 中仅覆盖 DECIMAL_SEPARATOR,同时保持本地化完整?

    Django 的本地化很好 方便获得翻译后的日期和月份以及正确的日期格式 我的问题是 在荷兰语语言环境中 逗号用于分隔小数 因此 12 45代替12 45 从理论上讲 这是正确的选择 然而 在实践中 几乎每个人都使用点作为小数点分隔符 至少
  • 如何使用 dom php 解析器

    我是 PHP 中 DOM 解析的新手 我有一个正在尝试解析的 HTML 文件 它有一堆这样的 DIV div div class txtnormal div Content1 div div Content2 div div div div