代码之家  ›  专栏  ›  技术社区  ›  rlandster

获取元素第n个实例的xpath查询

  •  108
  • rlandster  · 技术社区  · 14 年前

    有一个HTML文件(我不控制其内容)有几个 input 元素都具有相同的固定 id 的属性 "search_query" . 文件的内容可以更改,但我知道我总是想得到第二个 输入 具有id属性的元素 “搜索查询”

    我需要一个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代码可能会非常不同,并且 输入 元素可以出现在没有一致文档结构的任何地方(除非我保证始终至少有两个 输入 ID属性为的元素 “搜索查询” )

    正确的xpath表达式是什么?

    2 回复  |  直到 14 年前
        1
  •  194
  •   Dimitre Novatchev    14 年前

    这是常见问题 :

    //somexpression[$N]

    表示“查找所选的每个节点” //somexpression 这就是 $N 它的父母的孩子。

    你想要的是 :

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

    记得 : [] 运算符的优先级(优先级)高于 // 缩写。

        2
  •  14
  •   rlandster    14 年前

    这似乎有效:

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

    我从MichaelKay的“XSLT2.0和XPATH2.0程序员参考,第4版”开始。

    在XML路径语言规范的“缩写语法”部分还有一个注释。 http://www.w3.org/TR/xpath/#path-abbrev 这提供了一个线索。