【问题标题】:How can I use a wildcard on Xpath如何在 Xpath 上使用通配符
【发布时间】:2017-05-19 01:18:21
【问题描述】:
    cover: $main//*[has-class("aligncenter wp-image-121146 size-large")]//img
    cover: $main//img[has-class("aligncenter wp-image-121146 size-large")]

字符串有一个静态部分 aligncenter wp-image- 和一个动态部分 "" 我在这里要做的是连接所有可能的 ""

在 bash 中是这样的:

"aligncenter wp-image-"*

我怎样才能在 Xpath 中做到这一点?

【问题讨论】:

  • 您需要说明 XPath 的版本。在 XPath 2.0(或 3.0 或 3.1)中,您可以将 matches() 函数与正则表达式一起使用。在 1.0 中,您只有 starts-with()contains() 函数。

标签: html bash xpath wildcard


【解决方案1】:

我认为这会奏效:

'//E[@class="aligncenter" and contains(concat(" ", @class, "wp-image-"), " C ")]'

这可能更健壮,没有尝试过很多 and 并且看起来您希望这些类按该顺序排列:

'//E[contains(concat(" ", @class, "aligncenter wp-image-"), " C ")]'

我还没有测试过,无论如何,这应该对你有帮助:

https://gist.github.com/glenpierce/400d5b569094b902f06789d80757454e

【讨论】:

    【解决方案2】:

    由于您没有提供示例 XML/HTML,因此没有足够的信息为这个问题提供准确的 XPath 解决方案,并且尝试的两个 XPath 表达式(如果它们确实是)都是无效的。

    回答这个问题,你不能像在 XPath 1.0 中那样使用 wildcalrd,这是 XPath 实现最广泛的版本。但是您可以使用contains()starts-with() 函数。后者似乎更适合这种特殊情况。例如,以下 XPath 返回文档中的所有 img 元素,其中 class 属性值以子字符串 'aligncenter wp-image-' 开头:

    //img[starts-with(@class, 'aligncenter wp-image-')]
    

    demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多