XPath является языком выражений и в основном используется в веб-приложениях для выбора узлов в XML / HTML документах. Несмотря на это, выбор узлы с использованием XPath является более сложным, чем использовании CSS селекторов, XPath невероятно мощная и многофункциональная вещь.
Symfony предоставляет поддержку XPath через компонент DomCrawler, который обычно используется в тестах, чтобы подтвердить, что содержание данного ответа являются ожидаемыми. В Symfony 3.2 улучшена интеграция XPath путем добавления поддержки для оценки XPath выражений.
На практике это означает, что вы можете выполнять расширенную предварительную обработку информации, полученной с помощью XPath для упрощения кода ваших тестов. Рассмотрим, например, следующий HTML-код:
$html = '<html> <body> <span id="article-100" class="article">Article 1</span> <span id="article-101" class="article">Article 2</span> <span id="article-102" class="article">Article 3</span> </body> </html>';
С помощью функции substring-after()
XPath вы можете получить числовую часть атрибута идентификатора каждого узла:
use Symfony\Component\DomCrawler\Crawler; $crawler = new Crawler(); $crawler->addHtmlContent($html); $ids = $crawler->filterXPath('//span[contains(@id, "article-")]') ->evaluate('substring-after(@id, "-")'); // $ids = array:3 [ // 0 => "100" // 1 => "101" // 2 => "102" // ]
С помощью count()
функции XPath, можно, например, получить количество элементов <span>
, которые содержат CSS класс .article:
use Symfony\Component\DomCrawler\Crawler; $crawler = new Crawler(); $crawler->addHtmlContent($html); $num = $crawler->evaluate('count(//span[@class="article"])'); // $num = array:1 [ // 0 => 3.0 // ]
Пройдите по ссылке на MDN Xpath для быстрого обзора всех имеющихся функций или обратитесь к документу XPath и XQuery функции официальной докумендации W3C.
Источник: https://symfony.com/blog/new-in-symfony-3-2-added-support-for-xpath-expressions