web-dev-qa-db-ja.com

Symfony DomCrawler:特定の属性値を持つ要素を検索

DomCrawlerコンポーネントを使用しています: http://symfony.com/doc/current/components/dom_crawler.html

CSSのような構文を使用して、特定の属性値を持つ要素を取得したいと思います。

私が使用しているコードは次のとおりです。

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

次の結果が返されるため、これは機能するようです:

echo count($link);

ただし、これ以上フィルタリングすることはできません。私はできません:

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

これにより、次のエラーメッセージが表示されます。

The current node list is empty.

ただし、そうではないことは確かです。

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

21
Wesley

私はあなたの問題を追うことができません。 twoの現在の開発バージョン(および2.1.0および2.2.0バージョン)を使用するソフトウェアライブラリdom-crawlerおよび css-selector 次の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()で、2行目はsrc属性値です。

composer update?を実行しましたか?入力を再確認しましたか?

33
M8R-1jmw5r