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で)
私はあなたの問題を追うことができません。 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?を実行しましたか?入力を再確認しましたか?