我如何使用 XSLT 3.0 map:remove?

How do I use XSLT 3.0 map:remove?

我试图从 XSLT 3 映射中删除一个项目,但我将 运行 保留为如何处理 map:remove 函数的输出。在这一点上,我正在使用一个一次性变量来确保我没有 return 输出任何内容。

<xsl:if test="map:size($aMap) > 0">
    <xsl:variable name="throwaway" select="map:remove($aMap, map:keys($aMap)[1])"/>
</xsl:if>

有更简单的方法吗?

映射是不可变的,因此虽然您可以调用 map:remove($aMap, map:keys($aMap)[1]) 而不存储该调用的结果,但它不会更改变量 aMap 绑定到的映射,您需要存储结果remove 调用,在一个新的变量中,或者重新绑定现有的变量;所以

    <xsl:variable name="aMap" select="map { 'a' : 1, 'b' : 2, 'c' : 3 }"/>
    <xsl:message select="map:remove($aMap, 'b')"/>
    <size>{map:size($aMap)}</size>
    <xsl:variable name="aMap" select="map:remove($aMap, 'b')"/>
    <size>{map:size($aMap)}</size>

给予

   <size>3</size>
   <size>2</size>