我正在使用PHP Simple HTML DOM来解析具有以下 HTML 的网页。注意</span>
每个<li>
.
<li>
<span class="name">
<a href="">Link</a> asdasd
</span>
</span>
</li>
<li>
<span class="name">
<a href="">Link</a> asdasd2
</span>
</span>
</li>
我的查询是:
$lis = $dom->find('li');
foreach ($lis as $li) {
$spans = $li->find('span');
foreach ($spans as $span) {
echo $span->plaintext."<br>";
}
}
我的输出是:
Link asdasd
Link asdasd2
-----------
Link asdasd2
-----------
如您所见,find('span')
找到了两个跨度作为第一个的孩子,<li>
并从它可以找到的下一个中获取值<span>
(即使它是下一个的孩子<li>
)。删除尾随</span>
可以解决问题。
我的问题是:
为什么会这样?
我该如何解决这个特殊情况?其他一切都很好,我无法对我的脚本进行重大更改。如果需要,我可以轻松更改 DOM 查询。
我正在考虑计算开始和结束标签,</span>
如果它们太多,则剥离一个。既然他们总是<span>
s,有没有一种聪明的方法来用正则表达式检查它?