Компонент DomCrawler облегчает DOM навигацию для HTML и XML документов. Хотя это обычно используется для разработки функциональных тестов в приложениях Symfony2, он также может быть использован, чтобы отфильтровать содержимое, как показано в рамках проекта Goutte.
DomCrawler предоставляет несколько методов для фильтрации узла: filter(), reduce() и each(). По состоянию на Symfony 2.6, вы можете использовать другой удобный метод называется slice().
Как и в array_slice (), новая функция slice($offset, $length) возвращает последовательность элементов, с заданным смещением и длиной. Рассмотрим, например, код, необходимый для извлечения текстового содержимого некоторых элементов <li> из элемента #nav-menu
:
use Symfony\Component\DomCrawler\Crawler; $crawler = new Crawler(' ... some HTML content ... '); $crawler->filter('#nav-menu li')->each(function ($node, $i) { if ($i >= 2 && $i <= 7) { return $node->text(); } });
В Symfony 2.6, предыдущий код фильтрации узелов становится намного проще и элегантней:
$crawler->filter('#nav-menu li')->slice(2, 7)->each(function ($node, $i) { return $node->text(); });