php - 使用 PHP 将列出的项目从 DOM 字符串分解为数组
问题描述
我有一个格式化的 html 字符串,其中包含一些 UL 元素,并希望将其分解为一个 php 数组。
像:
<ul>
<li>List 1
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
</li>
<li>List 2
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
</li>
<li>List 3
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
</li>
</ul>
我正在寻找的是一种将第一级 li 标签(包括其中的内容/结构)放入 php 数组的解决方案。我试过.split,但它很脆弱。搁浅在 DOMXpath... 有人吗?
解决方案
$str = '<ul>
<li>List 1
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
</li>
<li>List 2
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
</li>
<li>List 3
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
</li>
</ul>';
$doc = new DOMDocument();
$doc->loadHTML($str);
$elements = $doc->getElementsByTagName('body')->item(0)->childNodes;
$data = array();
foreach ($elements as $node) {
foreach ($node->childNodes as $child) {
$data[]=$doc->saveHtml($child);
}
}
foreach($data as $d)
echo $d;
推荐阅读
- data-structures - n叉树中的最小层数?
- ios - 为什么即使我只需要自定义一个元素,我也必须添加样板文件才能使 Codable 工作?
- rust - 在 Rust 中读取和处理 UDP 数据报的最有效方法
- html - 输入位于 div 标头之外
- mongodb - 在此 MongoDB 更新中提高性能
- reactjs - 输入组前面的文本大小不正确
- python - 使用 iloc 后仍然收到 SettingWithCopyWarning。它从何而来?
- mongodb - 在 Node/Express 中同时处理客户端请求
- javascript - 分享到故事 - javascript 适配
- c++ - c++ 概念是否会导致编写模板实例化来构建输出?