如何用XPath获取所有key属性值?XLRelease工具兼容问题
解决XLRelease中XML XPath获取所有key属性值的问题
看起来你在Xebialabs XLRelease的XML Webhook任务里碰到了XPath兼容性的坑——这个工具没有完全实现标准XPath,导致本该返回所有匹配结果的表达式只给你第一个值,确实挺闹心的!
先帮你梳理下之前尝试的表达式里的问题,再给你适配XLRelease的解决方案:
你试过的表达式问题分析
//@*:这个会选中XML里所有属性,范围太广,不符合只取key属性的需求//entries/@*:<entries>节点本身没有任何属性,自然返回空结果,你需要的是它子节点<entry>的属性//entry@*、//entry@key、//entry@key=*:这些都是语法错误,属性选择器@必须紧跟在节点选择之后,正确写法是//entry/@*或者//entry/@key//entries/key[*]:这里误解了XML结构,key是<entry>的属性,不是子节点,所以这个表达式找不到任何内容//@key:标准XPath里这个确实能选中所有key属性,但XLRelease的工具只返回第一个匹配项,这是它的实现限制
针对XLRelease的可行解决方案
因为XLRelease对多结果XPath的支持有限,你可以根据场景选择下面两种方式:
1. 用string-join拼接所有key值成单个字符串
如果你的场景可以接受把所有key值用分隔符(比如逗号)拼接在一起,用这个表达式:
string-join(//entry/@key, ', ')
它会返回类似 resourceName, foo, somekey, keyname, keyname1 的结果,方便你在后续步骤里直接使用。
2. 结合XLRelease循环逐个提取key值
如果你需要单独处理每个key值,可以分两步操作:
- 第一步:用表达式获取所有
<entry>节点的列表://entry - 第二步:在XLRelease中添加循环步骤,遍历这个节点列表,在循环内部用表达式
current()/@key提取当前节点的key属性值,这样就能逐个获取所有key了。
另外,你也可以试试更精确的路径表达式(虽然和//@key逻辑一致,但部分工具对明确路径的支持更好):
//Document/entries/entry/@key
不过如果工具还是只返回第一个结果,那还是得用上面两种方案绕开限制。
内容的提问来源于stack exchange,提问作者Tijmen
相关产品推荐
相关产品推荐

