Я использую компонент 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)
Я не могу следовать вашей проблеме. Используя текущие версии разработки (а также версии 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()
а вторая – значение атрибута src.
Вы запустили обновление для композитора? Вы дважды проверили вход?