2013-04-30 36 views
13

私はDomCrawlerコンポーネントを使用しています:http://symfony.com/doc/current/components/dom_crawler.htmlsymfonyのDomCrawler:特定の属性値を持つ要素を検索し

私は、構文のようにCSSを使用して、特定の属性値を持つ要素を取得したいのですが。以下のリターン1として、

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

これは動作するようです:

はここで私が使用しているコードだ

echo count($link); 

しかし、私はこれよりもさらにフィルタしませんでしできます。私が行うことはできません。

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

これは、結果、次のエラーメッセージ

The current node list is empty. 

しかし、私は確かに知っていることではないこと。

私は他の要素についても構文を試しましたが、常に同じです。私は何か間違っているか、これは不可能です(xpathではなく、CSSのような構文で)

+2

'echo count($ link-> filter( 'img'));'の出力は何ですか? 0の場合は、あなたの子としてimg要素がないと思います。それが '現在のノードリストは空です。 'の理由です。 –

答えて

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()であり、2番目の値はsrc属性値です。

作曲家の更新を実行しましたか?入力を二重チェックしましたか?

+0

あなたの答えをありがとう。私は謝罪しなければならない。入力は本当に間違っていた。それはjavascriptを介して変換され、私はSafariを介してチェックしていました。これは単純なビューソースメソッドを持たず、データの誤った仮定につながります。 – Wesley

+1

@Wesley:https://discussions.apple.com/thread/4325736?start=0&tstart=0 < - あなたは開発者用メニューを有効にしましたか? –