XPath查询获取元素的第n个实例
有一个HTML文件(其内容我不控制)有几个input
元素都具有相同的固定id
属性"search_query"
。 该文件的内容可以改变,但我知道我总是想获得第二个input
元素的id属性"search_query"
。
我需要一个XPathexpression式来做到这一点。 我试过/ / //input[@id="search_query"][2]
但这不起作用。 以下是查询失败的示例XMLstring:
<div> <form> <input id="search_query" /> </form> </div> <div> <form> <input id="search_query" /> </form> </div> <div> <form> <input id="search_query" /> </form> </div>
请记住,上述仅仅是一个例子,其他的HTML代码可能会非常不同, input
元素可以出现在任何地方,没有一致的文档结构(除了我保证总是会有至less两个input
元素的id "search_query"
属性)。
什么是正确的XPathexpression式?
这是一个常见问题 :
//somexpression[$N]
的意思是“find每个节点select//somexpression
是其父母的第$N
个孩子”。
你想要的是 :
(//input[@id="search_query"])[2]
请记住 : []
运算符的优先级高于//
缩写的优先级。
这似乎工作:
/descendant::input[@id="search_query"][2]
我从Michael Kay的“XSLT 2.0和XPath 2.0程序员参考,第4版”
XMLpath语言规范http://www.w3.org/TR/xpath/#path-abbrev中的“缩写语法”部分也提供了一个提示。;