我的目标是要找到匹配的前一个兄弟姐妹中包含的文本。
我的xpath如下://*[@id='myid']/parent::td(/preceding-sibling::td/label/a)[1]
在这里,我希望td/label/a
的文本是//*[@id='myid']
的父级中最接近的文本。
能告诉我是否遇到任何错误?非常感谢。
更新1
此人正在//*[@id='myid']/parent::td/preceding-sibling::td[2]/label/a
工作,但并非每次2
,有时它可能是6
或其他任何事情。
更新2
示例1
<tbody>
<tr>
<td></td>
<td></td>
<td></td>
<td>
<label>
<a>text</a>
</label>
</td>
<td></td>
<td>
<input id='myid'>
</td>
</tr>
</tobdy>
示例2
<tbody>
<tr>
<td></td>
<td>
<label>
<a>text</a>
</label>
</td>
<td></td>
<td></td>
<td></td>
<td>
<input id='myid'>
</td>
</tr>
</tobdy>
示例3
<tbody>
<tr>
<td></td>
<td>
<label>
<a>text</a>
</label>
</td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td>
<input id='myid'>
</td>
</tr>
</tobdy>
答案 0 :(得分:2)
我认为您不需要与任何祖先接触;只需转到前面的第一个td
(其中包含label/a
)...
//input[@id='myid']/preceding::td[label/a][1]/label/a
答案 1 :(得分:0)
您可以在下面使用xpath。获取第一个父级tr
和一个子级label/a
//input[@id='myid']/ancestor::tr[1]//label/a
另一种方法是在xpath中将union operator用于所有情况下的所有定位器,以按需要进行操作:
//input[@id='myid']/ancestor::td/preceding-sibling::td/label/a | //input[@id='myid']/ancestor::tr[1]/preceding-sibling::tr//label/a
答案 2 :(得分:0)
就像我在您的示例中看到的那样,表内容似乎是动态的,但是<tbody>
必须是该表的一个。
(//input[@id='myid']/preceding::td/label/a)[last()]