需要一个javascript或jquery库来将jpath转换为jquery中的可选CSS3格式

我怎样才能转换xpath

/html/body/div[3]/ul/li[1]/a[5] html > body > div[3] > ul > li[1] > a[5] 

我相信,CSS3选择器不支持索引….所以如何处理这个?

如果您发现Sizzle / jQuery无法应用您的CSS3选择器,那么最好使用XPath插件 ,该插件是jQuery原始版本的一部分(然后由于很少有人实际使用它而被删除)。

浏览器中的XPath实现往往比CSS引擎快得多 。 还有JS解析并将XPath表达式转换为CSS3然后将jQuery munge转换为浏览器可以实现的东西(通常是带有一些JS帮助的CSS2.1选择器)将比直接在浏览器中执行XPath慢得多。

不仅如此,还有XPath可以做的事情,CSS无法做到。 例如:
//h3[class="blog-title"]/../../div[class="blog-entry"]//input[fn:floor(value) > 3]
对于XPath来说执行并不是过于复杂,但对于单独的CSS来说这是不可能的 – 即使在CSS3中,移动DOM并执行作为表达式一部分的函数也不能(据我所知)完成。

Selenium 1的CSS定位器引擎从CSSQuery转移到jQuery的CSS选择器库Sizzle。 所以你可以转换

 div[3]/ul/li[1]/a[5] 

 css=div:nth(3)>ul>li:nth(1)>a:nth(5) 

 //h3[class="blog-title"]/../../div[class="blog-entry"]//input[@value=3] 

可以转换为

 css=h3.blog-title:parent(div.blog-entry) input[value=3] 

然而//input[@value>3]是不可能的或者是棘手的更多信息请访问: https : //github.com/jquery/sizzle/wiki/Sizzle-Home

IE中的xpath实现非常非常慢。 在IE6中甚至可怕的慢,这就是为什么大多数人倾向于使用基于正则表达式等的CSS选择器,如sizzle或最新的qwery。 对于在CSS中使用的索引选择选择器:nth-child(n)

 a[5] = :nth-child(5) 

我不记得它是从0还是1开始所以它也可能是4。

此外,如果您在选择的父级中有不同类型的子级,则可以使用:nth-of-type() ,它仅选择给定的类型。 在你的情况下:

 a:nth-of-type(5) 

搜索了很多,最后找到了这两个库。 希望它可以帮助像我一样迷失的人:

  1. James Padolsey的CSS2XPATH曾被YQL HTML用于某个时间点
  2. css2xpath – XPath转换器的通用CSS

由于这是一个非常小众的领域,我欢迎社区对此进行编辑。