是否存在用于union的XPath表达式?
这对于查找类似按钮的HTML元素非常有效(特意简化): 现在我需要将其约束到上下文中。例如,出现在带标签的框中的“购买”按钮:是否存在用于union的XPath表达式?,xpath,union,expression,dry,Xpath,Union,Expression,Dry,这对于查找类似按钮的HTML元素非常有效(特意简化): 现在我需要将其约束到上下文中。例如,出现在带标签的框中的“购买”按钮: //legend[text()='Flubber'] 这是有效的,(…让我们进入包含字段集): 但有什么办法可以简化这一点吗?遗憾的是,这类事情不起作用: //legend[text()='Flubber']/..//( button[text()='Buy'] | input[@type='submit' and @value='Buy'] | a/img[@t
//legend[text()='Flubber']
这是有效的,(…让我们进入包含字段集):
但有什么办法可以简化这一点吗?遗憾的是,这类事情不起作用:
//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”是一个按钮
具有文本“Buy”或2)an的元素
input
具有属性的元素
类型
其值为“提交”且
名为value
的属性,其值为
“购买”或3)拥有
名为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'
]
非常好。稍微调整以获得A,而不是IMG:self::A[IMG[@title='Buy']](现在如果“Buy”可以减少的话:)嗯,这比较了3个值的串联,在这个简化的示例中,这3个值应该是相互排斥的部分。有趣的是,我最初的问题是如何大量使用union运算符,而这种改进是对union的微妙使用。@Chris Noe:这是使用节点集比较(而不是“串联”)最后一个谓词中的那些相对路径由self互斥,因为它们都从self轴开始:它们将处理任何文档,无论是简单的还是复杂的。是的,这打开了一些新的视野。Thx!@Chris Noe:XPath 1.0函数具有隐式强制转换,因此节点集成为单例(第一个节点)然后使用
number()
、string()
或boolean()
进行强制转换。但是这些相对路径是独占的,所以应该没有问题。或者,您可以使用非独占表达式:布尔(@value |@title |@alt)[normalize-space()='Buy'])
或布尔(@value |@title | alt)[以()开头)='Buy'])
。使用条件指令,不需要启动boolean()
。看起来,以示例开头的示例需要是:boolean((@value |@alt)[以(,'Buy')]开头,并且可以缩短为(@value |@alt)[以(,'Buy')]开头]
//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'
]