Новое в Symfony 3.2: Добавлена поддержка XPath выражений

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

Добавить комментарий

Ваш адрес email не будет опубликован.

15 − шесть =