猿问

用于获取元素的第n个实例的XPath查询

用于获取元素的第n个实例的XPath查询

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

什么是正确的XPath表达式?


蝴蝶刀刀
浏览 1478回答 3
3回答

白猪掌柜的

这是一个FAQ://somexpression[$N]表示“查找由其选择的每个节点//somexpression是$N其父节点的子节点”。你想要的是:(//input[@id="search_query"])[2]请记住:[]运算符的优先级(优先级)高于//缩写。

暮色呼如

小点:你永远不应该有一个具有给定ID的元素(因此问题中的HTML实际上是无效的)。在实践中,浏览器无论如何都会让你这样做,但如果你这样做,你会错过使用ID的唯一好处,那就是它们表示“我是独特的”(而类被设计用于非独特的能指)。
随时随地看视频慕课网APP
我要回答