2008-10-10 89 views
5

我正在创建一个工具,用于检查动态生成的XHTML并根据预期内容进行验证。服务器端css选择器

我需要确认结构是否正确以及特定属性是否存在/匹配。可能还有其他我不感兴趣的属性,所以直接字符串比较是不合适的。

验证此方法的一种方法是使用XPath,而且我已经实现了这一点,但我还想要一些不太冗长的东西 - 我希望能够像使用jQuery一样使用CSS选择器,但在服务器上 - 在CFML代码中 - 而不是在客户端上。

是否有一个CFML或Java库,允许我使用CSS选择器来处理XHTML字符串?

回答

7

我刚刚发布了一个开源项目,这是一个W3C CSS Selectors Level 3的Java实现。请试一试。我正在寻找同样的东西,并决定实施我自己的引擎。它受WebKit中代码的启发

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

2

我不知道Java库本身,但有一个名为Hpricot的Ruby库,它完全符合您的需求。结合Java平台上的Ruby实现JRuby,从Java代码调用Ruby方法(使用BSF,JSR-222 Scripting APIsan internal API)应该相对简单。

您使用Coldfusion 8吗? Coldfusion 8基于Java 6,支持JSR-222脚本API“javax.scripting”。请参阅this blog entry on embedding PHP within CFML。你应该可以做与Ruby相同。从这篇博客文章中链接了ZIP文件示例代码,如果你打开CFML,你会看到一个在Ruby中嵌入Ruby的好例子。

尽管可能需要一些工作才能使所有部分一起工作,但只需一点投资,它应该为您提供可靠的解析/ CSS选择器查询您正在查找的内容。

0

服务器和客户端之间存在理论上的差异。对于Web浏览器来说,文档是一个生动的DOM层次结构。对于你的服务器代码,它只是一个任何类型的XML文档。 XPath是访问XML文档元素的“正确”方式。

所以,除非您使用当前的XPath解决方案存在严重的性能问题,否则它实际上并不能正常工作,所以我建议您坚持使用它。尝试一些过于巧妙的事情会带来破坏某些工作的风险。

如果您发现的XPath是过于冗长和丑陋离开围坐,或希望更多的权力重新使用在不同情况下的工具,或者只是无法抗拒试图做的很漂亮,那么你可以尝试编写一个将给定的CSS选择器编译为XPath的实用程序。只要你需要,你可以在一行中调用它。

+0

xml!= html。你无法用xpath可靠地解析html – Shawn 2010-02-12 16:39:20

+0

如果XHTML有效,它就是XML的一个子集。这个问题清楚地表明它是他们正在产生的XHTML。 – 2010-02-23 11:18:38

+0

@Shawn我一直使用XPath解析HTML,使用创建DOM的库。您能否提供一个无法解析的有效HTML示例? – 2011-12-13 13:44:45

2

如果JRuby路线对您开放,Hpricot就是一个绝妙的解决方案。

Wrt。 XPath是访问XML文档的“正确”方式......抱歉,但这是垃圾。有许多方法可以访问XML文档的元素:DOM遍历,XPath,XQuery,CSS选择器等等。 XPath当然很受欢迎,但CSS选择器非常强大,假设您的XML文档具有HTML语义。

2

如果你可以在CFML中使用PHP(如上所述),你可以采取这个优秀的 “jQuery的PHP的” 库的优势,phpQuery

完全CSS选择器的支持,操作功能,遍历等等。它应该适合您需要的功能。

希望它有帮助。

0

它可能更容易使用cQuery.com - cQuery.com是一个基于API的“内容查询引擎”,通过使用CSS从实时网站提取内容。

您可以在您的应用程序中以编程方式使用它。