这对于查找类似按钮的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解决方案将无济于事。)

最佳答案

来自评论:



使用此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'
   ]

关于xpath - 是否有用于联合的DRYer XPath表达式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5516509/

10-16 22:11