3

XPath 3.1 支持一个新的映射特性,它允许在结果序列中映射。 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}]
4

1 回答 1

3

使用元素作为上下文项,您可以形成如下属性的映射:

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()但是如果有非数字属性,你还没有说你想做什么。

于 2017-05-22T21:39:53.293 回答