DomCrawler получает содержимое элемента после определенного элемента - PullRequest
2 голосов
/ 05 марта 2019

Я пытаюсь получить содержимое элемента, которое идет сразу после другого элемента.Вот пример кода:

<header>2010</header>
<div>
    <a href="">Some data</a>
    <a href="">Some data</a>
</div>
<header>2011</header>
<div>
    <a href="">Some data</a>
    <a href="">Some data</a>
</div>

Мне нужно отсортировать данные по годам, и я что-то пробовал, но за 2010 год он берет данные за все годы.

$crawler->filter('header')->each(function(Crawler $c) {
$year = $c->text();
$next = $c->nextAll();
$next->filter('div a')->each(function($node){
    $node->text();
});
});

Как я могу остановить его после получения всех div a s между двумя заголовками?

1 Ответ

1 голос
/ 05 марта 2019

В вашем случае вы можете взять только первый узел из nextAll и, поскольку этот первый элемент равен div, отфильтруйте в нем только a:

$crawler->filter('header')->each(function(Crawler $c) {
    $year = $c->text();
    dump($year);
    $next = $c->nextAll()->first();
    $next->filter('a')->each(function($node){
        dump($node->text());
    });
});
...