28

我正在尝试使用 xpath 函数lower-case或获取 xpath 查询upper-case,但它们似乎在 selenium 中不起作用(我在应用之前测试我的 xpath)。

不起作用的示例:

//*[.=upper-case('some text')]

只要我不使用大小写,我在复杂路径中定位我需要的节点甚至使用聚合函数都没有问题。

有没有人遇到过这个?是否有意义?

谢谢。

4

2 回答 2

65

upper-case()并且lower-case()是 XPath 2.0 函数。您的平台可能仅支持 XPath 1.0。

尝试:

translate('some text','abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')

这是 XPath 1.0 的方法。不幸的是,这需要了解文本使用的字母表。对于简单的英语,上述方法可能有效,但如果您希望使用重音字符,请确保将它们添加到列表中。


在大多数环境中,您在某种宿主语言之外使用 XPath,并且可以使用宿主语言的功能通过外部提供搜索字符串的大写和小写变体来解决此 XPath 1.0 限制translate()

以 Python 为例:

search = 'Some Text'
lc = search.lower()
uc = search.upper()

xpath = f"//p[contains(translate(., '{lc}', '{uc}'), '{uc}')]"

这将产生以下 XPath 表达式:

//p[contains(translate(., 'some text', 'SOME TEXT'), 'SOME TEXT')]

它不区分大小写搜索并适用于任意搜索文本。

于 2009-10-26T16:45:30.727 回答
2

如果您要在 xslt 的多个位置需要大写字母,您可以为小写字母和大写字母定义变量,然后在任何地方的翻译函数中使用它们。它应该使您的 xslt 更清洁。

XSL/XPATH中的示例:MSXML 4.0 中没有大写函数?

于 2009-12-31T03:55:37.003 回答