Селекторы css на стороне сервера

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

Мне нужно подтвердить, что структура правильная и что определенные атрибуты существуют / совпадают. Могут быть другие атрибуты, которые меня не интересуют, поэтому прямое сравнение строк не подходит.

Один из способов проверить это - с помощью XPath, и я уже реализовал это, но мне также хотелось бы чего-то менее подробного - я хочу иметь возможность использовать селекторы CSS, как я могу с jQuery, но на сервере - в коде CFML - в отличие от клиента.

Есть ли библиотека CFML или Java, которая позволяет мне использовать селекторы CSS для строки XHTML?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
0
3 385
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Я не знаю самой библиотеки Java, но есть библиотека Ruby под названием Hpricot, которая делает именно то, что вы ищете. В сочетании с реализацией Ruby на платформе Java, JRuby, вызов методов Ruby из кода Java должен быть относительно простым (с использованием BSF, API сценариев JSR-222 или внутренний API).

Вы используете Coldfusion 8? Coldfusion 8, основанный на Java 6, поддерживает API-интерфейсы сценариев JSR-222 «javax.scripting».

Взгляните на эта запись в блоге о встраивании PHP в CFML. Вы должны уметь делать то же самое с Руби. В этом блоге есть ссылка на пример кода ZIP-файла, и если вы откроете CFML, вы увидите хороший пример встраивания Ruby в CFML.

Хотя может потребоваться небольшая работа, чтобы заставить все части работать вместе, но с небольшими инвестициями он должен дать вам надежный синтаксический анализ / селектор CSS-запросов, который вы ищете.

Существует теоретическая разница между сервером и клиентом. Для веб-браузера документ представляет собой живую иерархию DOM. Для вашего серверного кода это просто XML-документ любого типа. XPath - это «правильный» способ доступа к элементам XML-документа.

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

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

xml! = html. вы не можете надежно разобрать html с помощью xpath

Shawn 12.02.2010 19:39

XHTML, если он действителен, является подмножеством XML. В вопросе ясно говорилось, что они генерируют XHTML.

Marcus Downing 23.02.2010 14:18

@Shawn Я постоянно разбираю HTML с помощью XPath, используя библиотеки, создающие DOM. Можете ли вы предоставить пример действительного HTML, который невозможно проанализировать?

Mark Thomas 13.12.2011 17:44

Hpricot - определенно фантастическое решение, если для вас открыт маршрут JRuby.

Wrt. XPath - это «правильный» способ доступа к XML-документам ... извините, но это чушь. Существует множество способов доступа к элементам XML-документа: обход DOM, XPath, XQuery, селекторы CSS и многие другие. XPath, безусловно, популярен, но селекторы CSS очень мощные, если предположить, что ваш XML-документ имеет семантику HTML.

Проблема в том, что hpricot основан на собственном парсере, и я не уверен, насколько легко было бы запустить его в jRuby.

Gareth Davis 09.03.2009 14:01

Hpricot отлично работает внутри JRuby, поскольку авторы создали Java-реализацию собственного парсера.

Ijonas 14.06.2009 10:53
Ответ принят как подходящий

Я только что выпустил проект с открытым исходным кодом, который представляет собой реализацию W3C CSS Selectors Level 3 на Java. Пожалуйста, попробуйте. Я искал то же самое и решил реализовать свой собственный движок. Он вдохновлен кодом в WebKit и т. д.

http://github.com/chrsan/css-selectors/tree

Спасибо, Кристер. У меня еще не было возможности вернуться к проекту, для которого мне это было нужно, но похоже, что это именно то, что я хочу - я взгляну на какой-то момент на этой неделе и дам вам любые отзывы, которые у меня могут быть.

Peter Boughton 07.04.2009 16:19

Выглядит очень красиво! Я мог бы рассмотреть возможность интеграции вашей библиотеки в JOOX

Lukas Eder 24.01.2012 20:24

Если вы можете использовать PHP в своем CFML (как упоминалось выше), вы можете воспользоваться этой превосходной библиотекой «jQuery для PHP», phpQuery

Полная поддержка селектора CSS, функций манипулирования, обхода и т. д. Он должен отлично работать для того, что вам нужно.

Надеюсь, это поможет.

может быть проще использовать cQuery.com - cQuery.com - это основанная на API «движка запросов контента» для извлечения контента с действующих веб-сайтов с помощью CSS.

Вы можете использовать его программно в своем приложении.

Другие вопросы по теме