如何获取元素的第n个实例的XPath查询?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (18)

有一个HTML文件(其内容我不控制)有几个input元素都具有相同的固定id属性"search_query"。该文件的内容可以改变,但我知道我总是想获得input具有id属性的第二个元素"search_query"

我需要一个XPath表达式来执行此操作。我尝试过,//input[@id="search_query"][2]但那不起作用。以下是查询失败的示例XML字符串:

<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元素可能出现在任何地方而没有一致的文档结构(除非我保证总会有至少两个input元素的id属性为"search_query")。

什么是正确的XPath表达式?

提问于
用户回答回答于

这是一个FAQ

//somexpression[$N]

意思是“查找所选的每个节点//somexpression都是$N其父代的第一个子元素”。

你想要的是

(//input[@id="search_query"])[2]

记住[]运营商具有比//缩写更高的优先级(优先级)。

用户回答回答于

这似乎是可行的:

/descendant::input[@id="search_query"][2]

扫码关注云+社区