繁体   English   中英

是否有用于联合的DRYer XPath表达式?

[英]Is there a DRYer XPath expression for union?

这对于查找类似按钮的HTML元素非常有效(特意简化):

  //button[text()='Buy']
| //input[@type='submit' and @value='Buy']
| //a/img[@title='Buy']

现在,我需要将其限制为上下文。 例如,出现在带标签的框中的“购买”按钮:

//legend[text()='Flubber']

这可以((..使我们进入包含的字段集):

  //legend[text()='Flubber']/..//button[text()='Buy']
| //legend[text()='Flubber']/..//input[@type='submit' and @value='Buy']
| //legend[text()='Flubber']/..//a/img[@title='Buy']

但是有什么方法可以简化这个过程吗? 可悲的是,这种事情不起作用:

//legend[text()='Flubber']/..//(
  button[text()='Buy']
| input[@type='submit' and @value='Buy']
| a/img[@title='Buy'])

(请注意,这是针对浏览器中的XPath的,因此XSLT解决方案将无济于事。)

在单个谓词中组合多个条件:

//legend[text()='Flubber']/..//*[self::button[text()='Buy'] or 
                                 self::input[@type='submit' and @value='Buy'] or
                                 self::img[@title='Buy'][parent::a]]

用英语:

选择具有文本“ Flubber”的任何legend元素的父级的所有后代(或父级本身),这些legend元素是以下任何一种:1)具有文本“ Buy”的button元素; 2)具有值为的属性typeinput元素“提交”和属性命名value ,其值是“买入”或3)一个img具有指定的属性title中包含“买”的值,且其家长为a元件。

来自评论:

稍微调整以获得A而不是IMG: self::a[img[@title='Buy']] (现在,如果只能减少“购买”

使用此XPath 1.0表达式:

//legend[text() = 'Flubber']/..
   //*[
      self::button/text()
    | self::input[@type = 'submit']/@value
    | self::a/img/@title
    = 'Buy'
   ]

编辑 :我没有看到父访问器。 仅在一个方向上以其他方式:

//*[legend[text() = 'Flubber']]
   //*[
      self::button/text()
    | self::input[@type = 'submit']/@value
    | self::a/img/@title
    = 'Buy'
   ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM