Может получить только один результат Dom Crawler

пытаясь получить весь контент в h2 (чтобы получить заголовок статьи) в div id=firehoselist, но следующий код возвращает только первый результат. Любые идеи, пожалуйста

    $crawler = new Crawler($content);

    $crawler->filterXPath('//div[@id="firehoselist"]//*')->each(function (Crawler $node) use (&$results) {

        $results[] = trim($node->filter('h2')->text());

 });

Контент, который я пытаюсь очистить, слишком запутан, чтобы публиковать его здесь, но он взят с веб-сайта slashdot org.


person GAV    schedule 29.11.2017    source источник


Ответы (1)


//div[@id="firehoselist"] ищет каждый элемент с идентификатором firehoselist и получает только первый результат этой записи $node->filter('h2')->text().

Что вам нужно, так это получить каждый #firehoselist h2 проанализированного html:

$crawler->filterXPath('//div[@id="firehoselist"]//h2')->each(function (Crawler $node) use (&$results) {

        $results[] = trim($node->text());

 });
person Azuloo    schedule 29.11.2017
comment
Coolio спасибо - также просто нужен дополнительный / для работы как $crawler-›filterXPath('//div[@id=firehoselist]//h2')-›each(function (Crawler $node) use (&$results) { - person GAV; 29.11.2017
comment
мне только что пришло в голову, что я на самом деле хотел, чтобы в цикле одновременно находились и другие элементы, а не только H2 - пробовал разные комбинации, но не мог с этим справиться - person GAV; 29.11.2017
comment
Я предполагаю, что '//div[@id="firehoselist"]//* даст вам все элементы контейнера с этим идентификатором. Вы пробовали? - person Azuloo; 29.11.2017
comment
Это дает содержимое, но теперь я не могу понять, как получить значение H2 - почему бы и нет $node-›filter('h2')->text(); возвращает ошибку "текущий список узлов пуст" - person GAV; 29.11.2017
comment
Эта ошибка означает, что у вас нет элемента h2. Просто распечатайте внутренности, чтобы увидеть, что у вас есть. - person Azuloo; 29.11.2017