我目前正在努力寻找正确的 xpath 表达式来选择其父/同级元素包含特定文本的输入元素。
在下面的示例中,我想选择“input”元素,在同一 tr
行中,存在具有特定文本的 td
元素。
我的示例路径 - 返回不匹配
//input[contains(../../../td/text(),"15-935-331")]
源代码
<tr>
<td><a href="xxx" target="_blank">xxxx, yyyyy</a></td>
<td>Mr</td>
<td></td>
<td> 15-935-331</td>
<form id="betreuerModel" action="xxxx" method="POST">
<td class="tRight">
<input value="Bearbeiten" id="bearbeiten" name="bearbeiten" class="submit" title="Bearbeiten" type="submit"/>
</td>
</form>
</tr>
<tr>
// .. next row with same structure
</tr>
最佳答案
contains
当给定一个节点集时,函数将只在该节点集中的第一个节点上运行。在您的情况下,它是 <td><a href="xxx" target="_blank">xxxx, yyyyy</a></td>
.
您可以改为重构您的表达式,以便谓词在所有要检查的节点上运行,并且 contains
函数对单个项目进行操作:
//input[../../../td/text()[contains(., "15-935-331")]]
这将得到任何 input
元素,其中父级的父级的父级包含 td
具有包含文本 15-935-331
的文本节点的元素.
一个可能更简单的指定方法是使用 ancestor::tr[1]/td
代替 ../../../td
.
//input[ancestor::tr[1]/td/text()[contains(.,"15-935-331")]]
这会得到第一个 tr
在祖先层次结构中,并对其进行操作。
关于html - xpath 表达式 - 选择父元素包含特定文本的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40800759/