css-переключатели на стороне сервера - PullRequest
5 голосов
/ 11 октября 2008

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

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

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

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

Ответы [ 6 ]

7 голосов
/ 07 апреля 2009

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

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

2 голосов
/ 22 августа 2009

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

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

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

2 голосов
/ 24 февраля 2009

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

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

2 голосов
/ 11 октября 2008

Я не знаю самой библиотеки 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 . Вы должны быть в состоянии сделать то же самое с Ruby . Существует пример кода ZIP-файла, связанный с этой публикацией в блоге, и если вы откроете CFML, вы увидите хороший пример встраивания Ruby в CFML.

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

0 голосов
/ 25 января 2010

может быть проще использовать cQuery.com - cQuery.com - это основанный на API 'Content Query Engine' для извлечения контента с живых сайтов с использованием CSS.

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

0 голосов
/ 11 октября 2008

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

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

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

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