XPath和CSS查询算法之间的区别

9
我想知道为什么有些人会选择使用CSS选择器而不是XPath选择器,反之亦然,如果他们可以使用任意一种。我认为理解处理这些语言的算法将解决我的疑惑。
虽然XPath和CSS选择器都有很多文档,但我发现很少有比较它们的文章。另外,我并不经常使用CSS选择器。
以下是我了解到的区别。(这三个参考资料讨论了在Selenium中使用XPath和CSS选择器查询HTML,但我的问题是普遍的。) 看起来CSS选择算法在某种程度上针对HTML进行了优化,但我不知道具体原因。
  1. 是否有关于CSS和XPath查询算法如何工作以及它们之间的区别的论文?
  2. 还有其他抽象的区别我可能没有注意到吗?

你是否想知道它们的区别是什么,无论是一般情况下还是在Selenium中使用时? - Brian
我想了解一般的差异。(实际上我从未使用过Selenium。) - Avery Richardson
1个回答

2
主要的区别在于您所针对的文档结构的稳定性:
1. XPath是一种良好的查询语言,当结构重要和/或稳定时。通常需要指定路径、条件、确切偏移量等,它也是一个检索类似对象集合的良好查询语言,并且由于这个原因,与XQuery有着密切的关系。这里文档具有稳定的结构,您必须检索重复/类似部分。 2. CSS选择器更适用于CSS样式表。这些不关心文档结构,因为这经常发生变化。想象一下一份应用于网站上所有HTML页面的CSS样式表。每个页面的内容和结构都不同。这里CSS选择器更好,因为它们可以应对不断变化的结构。您会注意到访问更多的是基于标记的。大多数CSS语法指定一组元素、属性、ID、类......而不是它们的结构。这里您必须定位没有明确位置但标有某些属性的部分。
更新:仔细查看您的问题后,我意识到您更感兴趣的是当前的实现,而不是查询语言的本质。在这种情况下,我不能给您想要的答案。我只能猜测原因仍然是一个比另一个更依赖于结构。
例如,在XPath中,您必须跟踪您正在处理的文档的结构。另一方面,CSS选择器在特定标记出现时被触发,它通常不关心之前发生了什么。我可以想象实现CSS选择器算法会更容易,因为当您阅读文档时就可以工作,而XPath有更多情况需要完整的文档和/或对其正在读取的内容进行严格跟踪(因为您正在读取的历史和背景更重要)。
现在,请不要过分认真看待我的更新。我只是猜测,因为我在语言解析方面有些背景,但实际上没有针对数据查询设计的经验。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接