2013-04-30 63 views
13

我使用DomCrawler组成元素:http://symfony.com/doc/current/components/dom_crawler.htmlSymfony的DomCrawler:查找具有特定属性值的

我想,使用类似语法的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)

+2

echo count的输出是什么($ link-> filter('img'));'?如果0,我想你没有一个img元素作为你的一个孩子。这就是'当前节点列表为空的原因.' – 2013-04-30 13:25:17

回答

22

我不能跟随你的问题。使用软件库DOM履带式css-selector,您所提供的作品就好考虑下面的示例HTML示例代码当前开发版本(以及2.1.0和2.2.0版本):

<?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属性值。

你运行了作曲家更新吗?你有没有仔细检查输入?

+0

谢谢你的回答。我必须道歉。输入确实不正确。它通过JavaScript进行了转换,我通过Safari进行了检查,它不再有简单的视图源方法,导致数据的错误假设。 – Wesley 2013-04-30 14:04:48

+1

@Wesley:https://discussions.apple.com/thread/4325736?start=0&tstart=0 < - 您已启用开发者菜单? – 2013-04-30 14:09:00

相关问题