Различия в алгоритмах запросов между XPath и CSS - PullRequest
9 голосов
/ 15 ноября 2011

Мне интересно, почему кто-то хотел бы использовать селекторы CSS, а не XPath-селекторы, или наоборот, если он мог бы использовать любой из них.Я думаю, что понимание алгоритмов, которые обрабатывают языки, разрешит мое удивление.

Существует много документации по XPath и CSS-селекторам по отдельности, но я нашел очень мало сравнений.Кроме того, я не очень часто использую селекторы CSS.

Вот что я прочитал о различиях.(Эти три ссылки обсуждают использование селекторов XPath и CSS в Selenium для запроса HTML, но мое удивление общее.)

Похоже, что алгоритмы выбора CSS каким-то образом оптимизированы для HTML, но я не знаю как.

  1. Есть ли статья о том, как работают алгоритмы запросов CSS и XPath и как они отличаются?
  2. Существуют ли другие абстрактные различия между языками, которые мне не хватает?

1 Ответ

2 голосов
/ 16 ноября 2011

Основное различие заключается в том, насколько стабильна целевая структура документа:

  1. XPath - это хороший язык запросов, когда структура имеет значение и / или является стабильной.Обычно вы указываете путь, условия, точное смещение ... это также хороший язык запросов для получения набора похожих объектов, и поэтому он тесно связан с XQuery.Здесь документ имеет стабильную структуру, и вы должны получить повторяющиеся / похожие разделы

  2. CSS-селекторы лучше подходят для стилевых таблиц CSS.Они не заботятся о структуре документа, потому что это сильно меняется.Представьте себе одну таблицу стилей CSS, применяемую ко всем HTML-страницам сайта.Содержание и структура каждой страницы различна.Здесь CSS-селекторы лучше из-за этой изменяющейся структуры.Вы заметите, что доступ основан на тегах.Большинство синтаксисов CSS определяют набор элементов, атрибутов, идентификаторов, классов ... и не столько их структуру.Здесь необходимо найти разделы, которые не имеют четкого расположения в структуре документа, но помечены определенными атрибутами.


Обновление : после более детального просмотраНа ваш вопрос я понял, что вас больше интересует текущая реализация, а не природа запросов к языкам.В этом случае я не могу дать вам ответ, который вы ищете.Я могу только предположить, что причина по-прежнему в том, что один больше зависит от структуры, чем другой.

Например, в XPath вы должны отслеживать структуру документа, над которым вы работаете.С другой стороны, селекторы CSS запускаются, когда появляется определенный тег, и обычно не имеет значения, что было до него.Я могу себе представить, что будет намного проще реализовать алгоритм выбора CSS, который будет работать при чтении документа, в то время как в XPath есть больше случаев, когда вам действительно нужен полный документ и / или строгий контроль того, что он читает (потому что история ифон того, что вы читаете, более важен)

Теперь не принимайте меня слишком серьезно в моем обновлении.Я только догадываюсь здесь, потому что у меня был некоторый опыт разбора языка, но на самом деле у меня нет опыта с теми, которые предназначены для запросов данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...