gpt4 book ai didi

css - 将谓词应用于xpath中的字符串为何有效?

转载 作者:行者123 更新时间:2023-12-03 17:23:04 25 4
gpt4 key购买 nike

通过谷歌搜索找不到任何答案。一位同事将CSS和xpath谓词混合在一起,并产生了以下xpath:

$x("//*[contains(@class, 'btn'[someattr='somevalue'])]")


该xpath返回文档中的所有元素。

我最大的理解是,显然可以将谓词应用于字符串('btn'),并且该谓词与字符串不匹配,从而使“ contains”的第二个参数为空。然后,这将匹配所有元素,因为它们的类属性至少不包含任何内容。

但是为什么这合法呢?

有没有一种方法可以构造与字符串值匹配的谓词,从而使第二个参数不为空?我尝试了类似 'btn'[text()='btn']的方法,但得到的结果与早期的表达式相同。

最佳答案

这在XPath 2.0中合法,但在1.0中不合法。

在XPath 1.0中,该语法允许将谓词应用于任何表达式,但是类型规则说,如果表达式对除节点集以外的任何值求值,这是一个错误。 (这是许多语言中的一种通用方法,可以使语法保持正交,但在类型系统中定义有关可以将哪些运算符应用于哪些值的规则)。

在XPath 2.0中,所有值都是序列,并且任何序列都可以由谓词过滤,因此过滤字符串序列非常有意义,并且由于单个字符串本身就是字符串序列,因此没有理由禁止案件。实际上,它很有用,我经常使用它:考虑:

print("Found " || $n || " error" || "s"[$n gt 1])


但是,即使在XPath 2.0中,您的示例也会失败,因为谓词 someattr='somevalue'的lhs表示 child::someattr,并且上下文项为字符串时不能使用轴表达式。

关于css - 将谓词应用于xpath中的字符串为何有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51969552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com