【问题标题】:Differences in query algorithms between XPath and CSSXPath 和 CSS 查询算法的区别
【发布时间】:2011-11-18 00:52:39
【问题描述】:

我想知道为什么有人要使用 CSS 选择器而不是 XPath 选择器,反之亦然,如果他可以使用其中任何一种。我认为理解处理这些语言的算法将解决我的疑惑。

有很多关于 XPath 和 CSS 选择器的文档,但我发现很少有比较。另外,我不太使用 CSS 选择器。

这是我读到的关于差异的内容。 (这三个参考文献讨论了在 Selenium 中使用 XPath 和 CSS 选择器来查询 HTML,但我的疑惑是普遍的。)

看起来 CSS 选择算法以某种方式针对 HTML 进行了优化,但我不知道如何。

  1. 是否有关于 CSS 和 XPath 查询算法的工作原理以及它们之间的区别的论文?
  2. 我缺少的语言之间是否存在其他抽象差异?

【问题讨论】:

  • 您想知道在 Selenium 中使用时一般或具体有什么区别吗?
  • 我想知道总体上的差异。 (我实际上从未使用过 Selenium。)

标签: html xml algorithm xpath css-selectors


【解决方案1】:

主要区别在于您所针对的文档结构的稳定性:

  1. 当结构重要和/或稳定时,XPath 是一种很好的查询语言。您通常指定路径、条件、确切的偏移量......它也是一种很好的查询语言来检索一组相似的对象,因此,它与 XQuery 有着密切的关系。这里文档结构稳定,您必须检索重复/相似的部分

  2. CSS 选择器适合更好的 CSS 样式表。这些不关心文档结构,因为这改变了很多。想象一个应用于网站所有 HTML 页面的 CSS 样式表。每个页面的内容和结构都不同。由于这种不断变化的结构,这里的 CSS 选择器更好。您会注意到访问更多地基于标签。大多数 CSS 语法指定了一组元素、属性、id、类……而不是它们的结构。您必须在此处找到在文档结构中没有明确位置但标有某些属性的部分。


更新:仔细查看您的问题后,我意识到您对当前的实现更感兴趣,而不是查询语言的性质。在那种情况下,我不能给你你正在寻找的答案。我只能假设原因仍然是一个比另一个更依赖于结构。

例如,在 XPath 中,您必须跟踪正在处理的文档的结构。另一方面,CSS 选择器会在特定标签出现时触发,通常它之前的内容并不重要。我可以想象,在阅读文档时实现 CSS 选择器算法会容易得多,而 XPath 在更多情况下您确实需要完整的文档和/或严格跟踪正在阅读的内容(因为历史和阅读内容的背景更重要)

现在,不要对我的更新太认真。我只是在这里猜测,因为我有一些语言解析的背景,但实际上我没有为数据查询设计的经验。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2012-12-18
    相关资源
    最近更新 更多