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

#java #html #coldfusion #css-selectors

Вопрос:

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

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

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

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

Ответ №1:

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

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

Комментарии:

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

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

Ответ №2:

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

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

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

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

Ответ №3:

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

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

Комментарии:

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

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

Ответ №4:

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

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

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

Ответ №5:

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

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

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

Комментарии:

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

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

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

Ответ №6:

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

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