Компонент CssSelector

Компонент CssSelector преобразует селекторы CSS в выражения XPath.

Установка

Вы можете установить компонент 2 способами:

Then, require the vendor/autoload.php file to enable the autoloading mechanism provided by Composer. Otherwise, your application won't be able to find the classes of this Symfony component.

Применение

Зачем использовать селекторы CSS?

Когда вы анализируете HTML или XML документ, наиболее мощным методом для этого является XPath.

Выражения XPath невероятно гибкие, так что почти всегда существует выражение XPath, которое найдёт нужный вам элемент. К сожалению, они также могут стать очень сложными, и обучение им непростое. Даже общие операци (например, поиск элемента с определённым классом), может требовать длинных и неупорядоченных выражений.

Многие разработчики -- особенно веб-разработчики -- больше всего любят использовать селекторы CSS для поиска элементов. Так же, как и работа с таблицами стилей, селекторы CSS используются в JavaScript с функцией querySelectorAll() и в популярных JavaScript библиотеках, вроде jQuery, Prototype и MooTools.

CSS селекторы менее мощные, чем XPath, но намного проще в написании, прочтении и понимании. Так как оии менее мощные, почи все селекторы CSS могут быть преобразованы в эквивилент XPath. Это выражение XPath может быть использовано с другими функциями и классами, использующими XPath, чтобы найти элементы в документе.

Компонент CssSelector

Единственная цель компонента - преобразовывать селекторы CSS в их эквиваленты XPath, используя toXPath():

1
2
3
4
use Symfony\Component\CssSelector\CssSelectorConverter;

$converter = new CssSelectorConverter();
var_dump($converter->toXPath('div.item > h4 > a'));

Это даёт следующий вывод:

1
descendant-or-self::div[@class and contains(concat(' ',normalize-space(@class), ' '), ' item ')]/h4/a

Вы можете использовать это выражение с, к примеру, DOMXPath или SimpleXMLElement, чтобы найти элементы в документе.

Tip

Метод Crawler::filter() использует компонент CssSelector, чтобы найти элеметы, основанные на строке CSS селектора. См. The DomCrawler Component, чтобы узнать больше.

Ограничения компонента CssSelector

Не все CSS селекторы могут быть преобразованы в эквиваленты XPath.

Вот некоторые CSS селекторы, которые имеют смысл только в контексте веб-браузера.

  • селекторы состояния ссылки: :link, :visited, :target
  • селекторы, основанные на действии пользователя: :hover, :focus, :active
  • селекторы состояния UI: :invalid, :indeterminate (однако, :enabled, :disabled, :checked и :unchecked доступны)

Псевдо-элементы (:before, :after, :first-line, :first-letter) не поддерживаются, так как они выбирают части текста, а не элементы.

Некоторые псевдо-классы ещё не поддерживаются:

  • *:first-of-type, *:last-of-type, *:nth-of-type, *:nth-last-of-type, *:only-of-type. (Эти работают с именем элемента (например, li:first-of-type) но не с *.

Узнайте больше

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.