You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写不区分大小写的XPath表达式提取XML属性?

实现不区分大小写的XPath属性提取

这问题我之前处理XML数据时也碰到过!毕竟XML天生大小写敏感,常规的@Fecha只能精准匹配首字母大写的属性,要兼容各种大小写变体(比如fecha、FECHA、fEcha),得根据你使用的XPath版本来选合适的写法:

方案1:XPath 2.0及以上版本(推荐)

如果你的解析器支持XPath 2.0或更高版本(比如Saxon、Java 8+的部分XML解析实现),可以直接用lower-case()函数统一转换属性名的大小写:

//*/@*[lower-case(local-name(.)) = 'fecha']
  • 拆解一下逻辑:
    • local-name(.) 获取当前属性的本地名称(不带命名空间前缀)
    • lower-case() 把名称转成全小写
    • 最后和全小写的目标值'fecha'对比,就能匹配所有大小写变体的属性

如果你只需要提取特定节点下的属性(比如<Factura>节点),把//*换成目标节点路径即可:

//Factura/@*[lower-case(local-name(.)) = 'fecha']

方案2:XPath 1.0版本(兼容旧环境)

要是你只能用XPath 1.0(很多旧版解析器默认只支持1.0),可以用translate()函数模拟大小写转换,把所有大写字母映射成小写:

//*/@*[translate(local-name(.), 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz') = 'fecha']
  • 这里的translate()会把属性名里的每个大写字母,替换成对应的小写字母,再和'fecha'对比,同样能实现不区分大小写的匹配。

注意事项

如果你的XML数据里同时存在多个大小写不同但名称近似的属性(比如同时有@Fecha和@fecha),这种写法会把它们都匹配出来,提前确认数据结构避免提取到多余值哦。

内容的提问来源于stack exchange,提问作者Omega Kewt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:59:58