如何使用单条XPath语法获取name属性为Z*NAME的字段数据?
解决XPath匹配Z类名称字段的问题
嘿,我明白你遇到的问题了——你想用XPath选中所有name属性以Z开头且以NAME结尾的<field>元素,但直接用/fields/field[@name="Z*NAME"]是行不通的,因为XPath里的*是节点通配符,不是字符串的模糊匹配符哦。下面给你两种不同XPath版本的解决方案:
XPath 1.0 兼容方案
如果你的环境只支持XPath 1.0(很多旧系统或工具默认是这个版本),可以结合starts-with()函数和字符串截取来实现:
/fields/field[starts-with(@name, 'Z') and substring(@name, string-length(@name) - string-length('NAME') + 1) = 'NAME']
starts-with(@name, 'Z'):确保name属性以Z开头substring(@name, string-length(@name) - string-length('NAME') + 1):截取name属性的最后4个字符(因为NAME是4个字符),然后判断是否等于NAME
XPath 2.0+ 简洁方案
如果你的环境支持XPath 2.0或更高版本(比如现代的XML编辑器、XSLT 2.0等),可以用matches()函数结合正则表达式,写法更直观:
/fields/field[matches(@name, '^Z.*NAME$')]
^Z:匹配以Z开头的字符串.*:匹配任意数量的任意字符(包括0个)NAME$:匹配以NAME结尾的字符串
这两个表达式都能从你的XML中精准选出Z01NAME、Z02NAME、Z03NAME这三个字段,试试看吧!
内容的提问来源于stack exchange,提问作者Romz Marco
相关产品推荐
相关产品推荐

