XPath 3.1支持新的 map 功能,该功能允许在结果序列中使用地图。 https://www.w3.org/TR/xpath-31/#id-maps
例如,这是有效的XPath 3.1表达式,它返回2个映射的硬编码序列:
(map {'a':1,'b':2,'c':3}, map {'x':-3,'y':-2,'z':-1})
我正在尝试使用此功能将节点属性收集为地图列表。
例如,对于给定的xml:
<root>
<node a="1" b="2" c="3"/>
<node x="-3" y="-2" z="-1"/>
</root>
如何制作简单的XPath表达式以获得以下结果:
[{'a':1,'b':2,'c':3}, {'x':-3,'y':-2,'z':-1}]
答案 0 :(得分:2)
使用元素作为上下文项,您可以形成如下属性的映射:
map:merge(@* ! map{local-name(): string()})
要获得元素序列$ in的映射序列,可以执行
$in ! map:merge(@* ! map{local-name(): string()})
要获取元素序列$ in的映射数组,可以执行
array { $in ! map:merge(@* ! map{local-name(): string()}) }
在您的示例中,您还要将属性值转换为数字,因此您可以使用xs:integer(.)
代替string()
。但是如果有非数字属性,你还没有说出你想做什么。