使用XPath选取第n个元素内的第n个节点:如何选中第二行的第二个input?
问题分析
你原来的写法失效有两个原因:
- 语法错误:两个定位表达式之间缺少路径运算符,XPath 不支持直接拼接两个括号表达式
- 逻辑错误:不加限定的
//input会从文档根节点开始全局搜索input,不会限定在你选中的第二个row节点范围内
正确写法
根据你的实际需求选择对应写法即可:
场景1:取第二个class=row的div下所有后代input的第二个(匹配你的示例需求,完全不关心中间节点结构)
((//div[@class='row'])[2]//input)[2]
注意外层括号不能省略:如果直接写
(//div[@class='row'])[2]//input[2],会匹配第二个row的后代中「所有是自身父节点下第二个子元素的input」,和需求不符。
场景2:取第二个class=row的div的第二个直接子节点下的任意层级input(适配你提到的whatever是未知嵌套层级的场景)
(//div[@class='row'])[2]/*[2]//input
这里的*[2]会匹配第二个row的第二个直接子节点,不管节点名称是什么,后续的//input会搜索该节点下任意层级的input元素。
内容的提问来源于stack exchange,提问作者Max Jacobi
相关产品推荐
相关产品推荐

