58

我试图找到一个动态 id 名称总是以“注册”结尾的输入元素。到目前为止我试过这个

"//input[@id[ends-with(.,'register')]]"

和这个

"//input[ends-with(@id,'register')]"

这些都不会导致元素。我究竟做错了什么?同时这有效:

"//input[@id[contains(.,'register')]]"

这是源代码的一部分:

<td class="input">
<input id="m.f0.menu.f2.volumeTabs.BLOCK_COMMON.tcw.form.register" name="m.f0.menu.f2.volumeTabs.BLOCK_COMMON.tcw.form.register" class="aranea-checkbox" type="checkbox"> </td>
4

2 回答 2

118

ends-with功能是 xpath 2.0 的一部分,但浏览器(您表示您正在使用 chrome 进行测试)通常仅支持 1.0。因此,您必须自己使用string-length,substring和 equals的组合来实现它

substring(@id, string-length(@id) - string-length('register') +1) = 'register'
于 2014-03-16T14:07:49.317 回答
3

Ian Roberts 接受的答案@id attribute在他的解决方案中使用了两次。

在这种情况下,我更喜欢这样放置谓词@id

//input[@id[substring(.,string-length(.) - string-length('register') + 1) = 'register']]
于 2021-05-28T08:01:45.660 回答