首页 文章

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

提问于
浏览
96

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

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

什么是正确的XPath表达式?

2 回答

  • 12

    This is a FAQ

    //somexpression[$N]

    表示“查找由 //somexpression 选择的每个节点,即其父节点的第_459627个子节点” .

    What you want is

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

    Remember[] 运算符的优先级(优先级)高于 // 的缩写 .

  • 177

    这似乎有效:

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

    我从迈克尔凯的“XSLT 2.0和XPath 2.0程序员参考,第4版”中得到了这个结论 .

    XML路径语言规范http://www.w3.org/TR/xpath/#path-abbrev的"Abbreviated Syntax"部分中还有一个注释提供了线索 .

相关问题