2008-10-10 9 views
5

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

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

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

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

ответ

7

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

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

2

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

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

Посмотрите на this blog entry on embedding PHP within CFML. Вы должны уметь делать то же самое с Ruby. В этом блоге есть код примера файла ZIP, и если вы открываете CFML, вы увидите хороший пример внедрения Ruby внутри CFML.

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

0

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

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

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

+0

xml! = Html. вы не можете достоверно разобрать html с xpath – Shawn 2010-02-12 16:39:20

+0

XHTML, если он действителен, является подмножеством XML. В вопросе ясно сказано, что это был XHTML, который они генерировали. – 2010-02-23 11:18:38

+0

@Shawn Я все время анализирую HTML с XPath, используя библиотеки, которые создают DOM. Можете ли вы привести пример допустимого HTML, который не может быть проанализирован? – 2011-12-13 13:44:45

2

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

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

2

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

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

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

0

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^