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中的“缩写语法”部分也提供了一个提示。;