1

我正在使用通过 Composer 加载的php-html-parser包(基于simplehtmldom)并解析 HTML 字符串,但是当使用 $dom->find() 循环遍历我正在搜索的所有元素时,它只是检测第一个元素(共 29 个)。

require __DIR__ . "/vendor/autoload.php";
$dom = new PHPHtmlParser\Dom;
$dom->load($result); // $result is the output of a cURL request
$classes = $dom->find('li[class=SPECIALCLASS]');
echo count($classes);
foreach($classes as $class){
   echo $class->text;
}

输出:1

示例 HTML:

<li class="SPECIALCLASS "></li>
<li class="SPECIALCLASS SOMEOTHERCLASS "></li>

编辑:完全删除类选择器会导致返回 5/29 li 标签,所以我觉得这里有更大的东西在起作用。

4

2 回答 2

1

尝试这样的事情:

$dom->find('li[contains(@class, "SPECIALCLASS")]');

代替:

$dom->find('li[class=SPECIALCLASS]');
于 2016-10-04T16:24:29.150 回答
0

以上解决方案都不适合我。我只是做一个黑客

while($dom->find("li.SPECIALCLASS", 0)) {
    $class = $dom->find("li.SPECIALCLASS", 0);
    echo $class->text;
    $class->delete();
    unset($class);
}

作为 PHPHtmlParser\Dom 在这两种情况下都只读单行find("li.class")find("li.class", 0).
所以我读了第一个元素获取数据并将其删除。在下一次迭代中,我将使用这个逻辑获得下一个类我遍历所有类

于 2022-02-22T09:19:07.367 回答