simple-html-dom - 使用简单的 html dom 解析 html 的逻辑
问题描述
我很难使用解析结构simple html dom
`<div class="class1">class</div>
`<div class="class2">data2</div>
`<div class="class2">data3</div>
`<div class="class1">text</div>
`<div class="class2">...</div>
由于结构没有嵌套,所以我很难解析它。我希望将数据库class1
作为主标题和class2
子标题。因此,对于每一个class1
,我都想阅读所有class2
标签,直到另一个标签class1
到来。希望它有意义。
解决方案
您可以检查类元素以查看是否到达了另一个class1
元素。这样的事情解释了一般的想法:
$str =<<<'html'
<div class="class1">class</div>
<div class="class2">data2</div>
<div class="class2">data3</div>
<div class="class1">text</div>
<div class="class2">...</div>
html;
$html = str_get_html($str);
// Store all results in a multi dimensional array
$result = [];
$group = -1;
foreach ($html->find('div') as $elem) {
// if element class is class1, create a new array to gather data
if($elem->class == 'class1') {
$group++;
$result[$group] = [];
}
$result[$group][] = $elem->plaintext;
}
print_r($result);
所以每次我们遇到一个新元素时,class1
我们都会开始在一个新数组中收集信息,所以最终结果是一个嵌套数组,它按照您描述的方式对元素进行分组。
推荐阅读
- javascript - 提高在浏览器控制台中运行的 js 机器人的执行速度的方法
- python - Django AttributeError:导入表单类
- html - 如果我选中了所有兄弟复选框,父复选框将自动选中
- node.js - Meteor Docker Node.js 版本不匹配
- android - 在java类中获取活动结果
- javascript - 组合 Javascript 对象
- vue.js - 从第三方 API 设置 cookie
- shippo - 如果 transaction.carrier_account 和 transaction.shipment.carrier_account 冲突,Shippo 交易 API 中的预期行为是什么?
- reactjs - 如何在蚂蚁设计中链接两个表格的分页?
- apache-kafka - 单个消费者可以从 kafka 主题的多个分区中读取吗?