Symfony DomCrawler:查找具有特定属性值的元素
Posted
技术标签:
【中文标题】Symfony DomCrawler:查找具有特定属性值的元素【英文标题】:Symfony DomCrawler: Find element with specific attribute value 【发布时间】:2013-04-24 10:28:14 【问题描述】:我正在使用 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)
【问题讨论】:
echo count($link->filter('img'));
的输出是什么?如果为 0,我猜你没有 img 元素作为你的 a 的子元素。这就是The current node list is empty.
的原因
【参考方案1】:
我无法关注您的问题。使用两个软件库dom-crawler和css-selector的当前开发版本(以及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属性值。
你运行作曲家更新了吗?您是否仔细检查了输入?
【讨论】:
感谢您的回答。我必须道歉。输入确实不正确。它是通过 javascript 转换的,我通过 Safari 进行检查,它不再具有简单的查看源方法,导致对数据的错误假设。 @Wesley: discussions.apple.com/thread/4325736?start=0&tstart=0以上是关于Symfony DomCrawler:查找具有特定属性值的元素的主要内容,如果未能解决你的问题,请参考以下文章
在laravel中使用Symfony的Crawler组件分析HTML
Symfony 2 Dom Crawler:如何在 Element 中仅获取 text()
PHP 使用Symfony插件sfDoctrineGuard按组名查找特定组中的用户