php - php dom从循环中获取多个元素
问题描述
下面是我的 html 结构,我想要输出如下: post_message div 中的内容和相应的图像
就像是 :
test 123 -> 1.png
test 1232 -> 2.png
test 1232 -> 3.png
网页内容
<div class="abc">
<div>
<div class="udata">
<div class="post_message"><p>test 123</p></div>
<div class="">
<img class="scaledImageFitWidth img" src="1.png">
</div>
</div>
</div>
</div>
<div class="abc">
<div>
<div class="udata">
<div class="post_message"><p>test 1232</p></div>
<div class="">
<img class="scaledImageFitWidth img" src="2.png">
<img class="scaledImageFitWidth img" src="3.png">
</div>
</div>
</div>
</div>
下面是我的 php 代码,但它似乎不起作用:
<?php
$dom = new DomDocument();
// $dom->load($filePath);
@$dom->loadHTML($fop);
$finder = new DomXPath($dom);
$classname="udata";
$nodes = $finder->query("//*[contains(@class, '$classname')]");
// print_r($nodes);
foreach ($nodes as $i => $node) {
$entries = $finder->query("//*[contains(@class, 'post_message')]", $node);
print_r($entries);
$isrc = $node->query("//img/@src");
print_r($isrc);
}
解决方案
使用 XPath 时,您总是需要使您的 XPath 相对于起始节点,因此使用descendant
轴来确保您限制后续搜索仅在起始点的节点部分。
所以代码看起来更像......
foreach ($nodes as $i => $node) {
$entries = $finder->query("descendant::*[contains(@class, 'post_message')]", $node);
echo $entries[0]->textContent .":";
$isrc = $finder->query("descendant::img/@src", $node);
foreach ( $isrc as $src ) {
echo $src->textContent.",";
}
echo PHP_EOL;
}
这将输出
test 123:1.png,
test 1232:2.png,3.png,
推荐阅读
- dns - DNS - 如何以绑定格式检索完整的区域定义?
- python-3.x - 在排序列表中多次查找最接近数字的最快方法
- reactjs - React Day Picker:如何在“选择多个日期”中禁用与禁用日期的交互
- c# - NUnit 在取消警报后似乎失去了对 Reflect.js 的跟踪
- javascript - 如何将 Firebase 与 Wix 连接
- android - 将两个数组列表与 ParseObject 进行比较的问题
- coq - 具有部分反函数的野战战术
- docker - 无法访问气流 UI
- javascript - DFS如何在javascript中的嵌套数组上工作
- python - 对多个 NumPy 数组执行逻辑或运算