Symfony DomCrawler:查找具有特定属性值的元素

2022-08-30 17:44:58

我正在使用DomCrawler组件:http://symfony.com/doc/current/components/dom_crawler.html

我想使用类似CSS的语法,获取具有特定属性值的元素。

以下是我正在使用的代码:

$link = $crawler->filter('#product a[data-type="bla"]');

这似乎有效,因为以下内容返回 1:

echo count($link);

但是,我永远不会不过滤比这更进一步。我不能做:

$link->filter('img')->attr('src'); 

这将导致以下错误消息:

The current node list is empty.

但是,我确信事实并非如此。

我已经在其他元素上尝试了语法,它总是一样的。我做错了什么,或者这是不可能的(使用css喜欢语法,而不是xpath)


答案 1

我不能跟随你的问题。使用两个软件库 dom-crawlercss-selecter 的当前开发版本(以及 2.1.0 和 2.2.0 版本),考虑到以下示例 HTML,您提供的示例代码工作正常:

<?php
use Symfony\Component\DomCrawler\Crawler;

// require dependencies here    

$html = <<<'HTML'
<!DOCTYPE html>
<html>
    <body>
        <p class="message">Hello World!</p>
        <p>Hello Crawler!</p>
        <div id="product">
            <a data-type="bla">
                <img src="OK">
            </a>
        </div>
    </body>
</html>
HTML;

$crawler = new Crawler($html);

$link = $crawler->filter('#product a[data-type="bla"]');

echo var_dump(count($link));

var_dump($link->filter('img')->attr('src'));

正如你所看到的,这正是你的代码(只有一点点不同,但本质上不是),它给出了以下逐字输出:

int(1)
string(2) "OK"

第一个输出行是 count(),第二个是 src 属性值。

您是否运行了编辑器更新?您是否仔细检查了输入?


答案 2

推荐