XPath 3.1 表达式为每个选定节点收集属性作为 name/value 映射
XPath 3.1 expression to collect attributes as name/value maps for each selected node
XPath 3.1 支持新的 map 特性,允许在结果序列中映射。
https://www.w3.org/TR/xpath-31/#id-maps
例如,这里是有效的 XPath 3.1 表达式,returns 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}]
将一个元素作为上下文项,您可以像这样形成一个属性映射:
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()
。但是你还没有说如果有非数字属性你想做什么
XPath 3.1 支持新的 map 特性,允许在结果序列中映射。 https://www.w3.org/TR/xpath-31/#id-maps
例如,这里是有效的 XPath 3.1 表达式,returns 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}]
将一个元素作为上下文项,您可以像这样形成一个属性映射:
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()
。但是你还没有说如果有非数字属性你想做什么