【发布时间】:2016-07-24 05:59:15
【问题描述】:
我正在尝试使用 XPath 实现不区分大小写的搜索。
我已经提到了how to perform a case-insensitive attribute selector in xquery,所以请在标记为重复之前检查。我正在使用 Lcase 将我的变量 (L_search) 转换为小写和小写函数。
我原来区分大小写的 XPath 表达式是:
XPath = "//*[contains(., '"& search &"')]/ancestor-or-self::*/*[local-name()='home' and @locale='en']"
我尝试了很多组合,例如:
XPath = "//*lower-case([contains(., '"& L_search &"')])/ancestor-or-self::*/*[local-name()='home' and @locale='en']"
XPath = "//*[contains(lower-case(.), '"& L_search &"')])/ancestor-or-self::*/*[local-name()='home' and @locale='en']"
但它们都没有产生结果。
这是我正在运行的代码:
Sub ProcessFolder(FolderPath)
On Error Resume Next
Set fldr = fso.GetFolder(FolderPath)
Set Fls = fldr.files
For Each thing in Fls
sFSpec = FSO.GetAbsolutePathName(thing)
objMSXML.async = True
objMSXML.load sFSpec
If 0 = objMSXML.parseError Then
Dim sXPath : sXPath = "//*[contains(., '"& search &"')]/ancestor-or-self::*/*[local-name()='name' and @locale='en']"
Dim querySubject : Set querySubject = objMSXML.selectSingleNode(sXPath)
Set p = document.createElement("p")
p.innerText = thing.Path
document.body.appendChild p
If querySubject Is Nothing Then
MsgBox sXPath, "failed"
【问题讨论】:
-
按原样,您的问题很难回答。您使用的是什么 XQuery 实现,它是否支持 XQuery 3.0?您是否真的使用 XQuery,因为您正在调用字符串“XPath”,这只是一个子集?请通常提供可重现的示例,其中包括输入和预期输出。我投票结束您的问题,因为您的问题不完整,请使用所需的详细信息对其进行编辑(这将停止关闭过程)。
-
根据您的问题标题,我已经shown you how to do case-insensitive matching。如果您需要进一步的帮助,请阅读How to Ask,在您说此xpath 代码对我工作正常 处解释您的评论(所以您的问题得到了回答?),如果您仍有问题,创建一个minimal reproducible example。谢谢。
-
您发布的代码看起来像使用 MSXML 的 VBScript,它只支持 XPath 1.0,但肯定不支持 XQuery 版本。
-
这个问题现在看起来好多了,而且您添加了非常相关的信息。请注意,您没有对 XQuery 的任何支持,并且坚持使用非常简单的 XPath 1.0。已经作为答案提供的
translate(...)解决方案对您来说是唯一可能的,尽管它不是很优雅。 XQuery 是 XPath 的一个更强大的超集,但几乎没有直接的语言支持,并且需要嵌入或连接一些提供 XQuery 集成的库。 -
在仔细研究了这里真正要问的问题之后,如何做到不区分大小写
contains()实际上只是 case insensitive xpath contains() possible? 的复制品