【问题标题】:server-side css selectors服务器端 CSS 选择器
【发布时间】:2010-09-16 15:14:40
【问题描述】:

我正在创建一个工具,它将检查动态生成的 XHTML 并根据预期内容对其进行验证。

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

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

是否有 CFML 或 Java 库允许我针对 XHTML 字符串使用 CSS 选择器?

【问题讨论】:

    标签: java html coldfusion css-selectors


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢克里斯特。我还没有机会回到我需要这个的项目,但它似乎正是我想要的 - 我会在本周的某个时间点看看,并给你我可能有的任何反馈。
    • 这看起来很不错!我可能会考虑将您的库集成到jOOX
    【解决方案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,你会看到一个在 CFML 中嵌入 Ruby 的好例子。

    虽然让所有部分协同工作可能需要一些工作,但只要投入一些资金,它就会为您提供所需的强大解析/CSS 选择器查询。

    【讨论】:

      【解决方案3】:

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

      写。 XPath 是访问 XML 文档的“正确”方式……抱歉,这是垃圾。访问 XML 文档元素的方法有很多种:DOM 遍历、XPath、XQuery、CSS 选择器等等。 XPath 确实很流行,但 CSS 选择器非常强大,假设您的 XML 文档具有 HTML 语义。

      【讨论】:

      • 问题是 hpricot 基于原生解析器,不知道让它在 jRuby 中运行有多容易。
      • Hpricot 在 JRuby 中运行良好,因为作者已经构建了原生解析器的 Java 实现。
      【解决方案4】:

      如果您可以在 CFML 中使用 PHP(如上所述),您可以利用这个出色的“jQuery for PHP”库,phpQuery

      完整的 CSS 选择器支持、操作函数、遍历等。它应该可以很好地满足您的需求。

      希望对你有帮助。

      【讨论】:

        【解决方案5】:

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

        因此,除非您当前的 XPath 解决方案存在严重的性能问题,或者它实际上不能正常工作,否则我建议您坚持使用它。尝试一些过于聪明的东西会带来破坏正在工作的东西的风险。

        如果您发现 XPath 冗长且丑陋而无法闲置,或者想要在不同情况下重用该工具,或者无法抗拒尝试做某事聪明,那么您可以尝试编写一个实用程序,将给定的 CSS 选择器编译成 XPath。然后,您可以在需要时在一行中调用它。

        【讨论】:

        • xml != html。你不能用 xpath 可靠地解析 html
        • XHTML(如果有效)是 XML 的子集。问题清楚地表明这是他们生成的 XHTML。
        • @Shawn 我一直使用 XPath 解析 HTML,使用创建 DOM 的库。能否提供一个无法解析的有效 HTML 示例?
        【解决方案6】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-12-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-09
          • 2016-02-22
          • 1970-01-01
          • 2017-02-25
          相关资源
          最近更新 更多