我想要采取一系列的映射并找到不同的值,显而易见的事情是。
<xsl:variable name="sequence" select="
( map { 'foo' : 1, 'bar' : () },
map { 'foo' : 1, 'bar' : '3' },
map { 'foo' : 1, 'bar' : '3' } )" as="map(xs:string,item()*)*"/>
<xsl:variable name="distinct" select="distinct-values($sequence)"/>
但这引发了警告
Error in xsl:variable/@select on line 29 column 76 of PurchasableSeasonOG.content.xsl: FOTY0013 An atomic value is required for the first argument of fn:distinct-values(), but the supplied type is a map type, which cannot be atomized
即地图不是原子值,足够公平。
我期待答案是
( map { 'foo' : 1, 'bar' : () },
map { 'foo' : 1, 'bar' : '3' } )
但你该怎么做呢?
附言
我可以看到如何使用硬编码的 for-each-group 来执行此操作,甚至构建一个递归函数通过 for-each-group 来执行此操作,但我希望 XPath 工具箱中有可以执行此操作的函数,而且我正在努力按可以是空序列的键进行分组。