我想知道为什么有人会想要使用CSS选择器而不是XPath选择器,反之亦然,如果他可以使用其中任何一个。我认为理解处理语言的算法将解决我的奇迹。
有很多关于XPath和CSS选择器的文档,但我发现很少有比较。另外,我不太使用CSS选择器。
这是我读到的有关差异的内容。 (这三个参考文献讨论了在Selenium中使用XPath和CSS选择器来查询HTML,但我的想法很普遍。)
看起来CSS选择算法在某种程度上针对HTML进行了优化,但我不知道如何。
答案 0 :(得分:2)
主要区别在于您定位的文档结构的稳定性:
当结构重要和/或稳定时,XPath是一种很好的查询语言。您通常指定路径,条件,精确偏移...它也是一种很好的查询语言来检索一组类似的对象,因此,它与XQuery有着密切的关系。这里的文档具有稳定的结构,您必须检索重复/类似的部分
CSS选择器适合更好的CSS样式表。这些并不关心文档结构,因为这会发生很大变化。想想应用于网站所有HTML页面的一个CSS样式表。每个页面的内容和结构都不同。由于结构的变化,CSS选择器更好。您会注意到访问权限更基于标记。大多数CSS语法都指定了一组元素,属性,id,类......而不是它们的结构。在这里,您必须找到文档结构中没有明确位置但标有某些属性的部分。
更新:仔细查看您的问题后,我意识到您对当前的实现更感兴趣,而不是查询语言的本质。在那种情况下,我不能给你你正在寻找的答案。我只能假设原因仍然是人们比其他人更依赖于结构。
例如,在XPath中,您必须跟踪正在处理的文档的结构。另一方面,CSS选择器在特定标签出现时被触发,并且它通常与之前的内容无关。我可以想象,实现一个在阅读文档时工作的CSS选择器算法要容易得多,而XPath有更多的情况需要完整的文档和/或严格跟踪它的内容(因为历史和你正在阅读的背景更重要)
现在,不要让我对我的更新太认真。我只是在这里猜测,因为我有一些关于语言解析的背景知识,但实际上我没有使用专为数据查询设计的经验。