当前位置: 首页 > 知识库问答 >
问题:

使用 DOM 文档循环遍历多个 HTML 元素

胡光霁
2023-03-14

我有一个页面看起来像这样:

...
<div class="container">

<div class="info">
<h3>Info 1</h3>
<span class="title">Title for Info 1</span>
<a href="http://www.example.com/1">Link to Example 1</a>
</div> <!-- /info -->

<div class="info">
<h3>Info 2</h3>
<span class="title">Title for Info 2</span>
<a href="http://www.example.com/2">Link to Example 2</a>
</div> <!-- /info -->

<div class="info">
<h3>Info 3</h3>
<span class="title">Title for Info 3</span>
<a href="http://www.example.com/3">Link to Example 3</a>
</div> <!-- /info -->

</div> <!-- /container -->
...

每个info类div的结构都是相同的,我希望能够遍历文档,对于每个具有info类的div,将各个组件解析为数组或单个变量,以便以某种人类可读的格式输出数据,如csv文件或HTML表。

我已经尝试使用DOMDocument方法,并使用getElementByTagName提取每个标记的内容,但是因为div包含多种标记类型(h3,a,span),所以我还不知道如何完成我要做的事情。

最后,我希望能够将数据转换成这样的格式:

divclass, h3, spanclass, spantitle, ahref, a
info, Info 1, title, Title for Info 1, http://www.example.com/1, Link to Example 1
...

谢谢!

共有1个答案

洪昱
2023-03-14
<?php
$html = '
<div class="container">

<div class="info">
<h3>Info 1</h3>
<span class="title">Title for Info 1</span>
<a href="http://www.example.com/1">Link to Example 1</a>
</div> <!-- /info -->

<div class="info">
<h3>Info 2</h3>
<span class="title">Title for Info 2</span>
<a href="http://www.example.com/2">Link to Example 2</a>
</div> <!-- /info -->

<div class="info">
<h3>Info 3</h3>
<span class="title">Title for Info 3</span>
<a href="http://www.example.com/3">Link to Example 3</a>
</div> <!-- /info -->

</div> <!-- /container -->
';


$dom_document = new DOMDocument();

$dom_document->loadHTML($html);
$dom_document->preserveWhiteSpace = false;

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

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

if (!is_null($elements)) {

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

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

  }
}
 类似资料:
  • 需要帮助通过简单的HTML DOM解析器遍历DOM树。如果有人能花点时间来看看它是如何工作的,那么如果我能理解的话,知识渊博的PHP程序员应该能很快理解它。我陷入困境的地方是从我朋友的俄罗斯篮球网站上的一个部门那里得到文章。例如,以下是博客div的外观: 这就是我如何拉出单个“a”链接并显示它们的方法,但我想做的是获取所有链接的div标题,基本上对它们进行分类,而不是将所有内容都排成一行。我不知道

  • 问题 你有一个HTML文档要从中提取数据,并了解这个HTML文档的结构。 方法 将HTML解析成一个Document之后,就可以使用类似于DOM的方法进行操作。示例代码: File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); Elem

  • 如何解析一个HTML文档: String html = "<html><head><title>First parse</title></head>" + "<body><p>Parsed HTML into a doc.</p></body></html>"; Document doc = Jsoup.parse(html); (更详细内容可查看 解析一个HTML字符串.) 其解析器能够尽

  • 我的目标是让每个线程用户使用他们自己的。csv文件,并在每个循环中取不同的值。 我所拥有的是: 具有.CSV文件路径的CSV数据集配置元素,用于登录用户(为此在CSV数据集配置中指定了用户变量,目前没有密码),包含user1和user2值。 使用它们的用户名分别为user1和user2的两个单列。csv文件。 每个文件都包含一列,其值为user1(或user2对应于文件名)_test1、user1

  • 我得到一个使用下面的代码的锚的列表,然后我想去每个链接。我想出了下面的代码,但是在第一个循环之后,我得到了以下异常 org.openqa.selenium.staleElementReferenceException:过时元素引用:元素未附加到页面文档(会话信息:Chrome=55.0.2883.87) 有没有办法做到这一点,而不需要每次返回页面?

  • DOM 让我们可以对元素和它们中的内容做任何事,但是首先我们需要获取到对应的 DOM 对象。 对 DOM 的所有操作都是以 document 对象开始。它是 DOM 的主“入口点”。从它我们可以访问任何节点。 这里是一张描述对象间链接的图片,通过这些链接我们可以在 DOM 节点之间移动。 让我们更详细地讨论它们吧。 在最顶层:documentElement 和 body 最顶层的树节点可以直接作为