【问题标题】:Xpath "ends-with" does not workXpath“结束于”不起作用
【发布时间】:2014-04-21 14:53:52
【问题描述】:

我试图找到一个动态 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>

【问题讨论】:

  • 您使用哪个版本的 xpath?
  • 除了XPath版本(1.0没有ends-with()),能不能也给我们看一些显示问题的XML?
  • 嗯,不确定 - 我如何检查版本?我正在通过 Google Chrome 的控制台进行测试。 Chrome 使用的是哪个版本?
  • 至少显示可以重现问题的示例 XML。 id 属性的值是否有可能在末尾有空格,所以它不完全以 'register' 结尾?

标签: xpath ends-with


【解决方案1】:

ends-with 函数是 xpath 2.0 的一部分,但浏览器(您表明您正在使用 chrome 进行测试)通常只支持 1.0。所以你必须自己用string-lengthsubstring和equals的组合来实现它

substring(@id, string-length(@id) - string-length('register') +1) = 'register'

【讨论】:

    【解决方案2】:

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

    在这种情况下,我更喜欢将谓词放在 @id 上,如下所示:

    //input[@id[substring(.,string-length(.) - string-length('register') + 1) = 'register']]
    

    【讨论】:

      猜你喜欢
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多