如何使用XSLT 3.0的map:remove?求移除映射元素的简便方法
嘿,这个场景我太熟悉了!其实你完全不用特意定义一个throwaway变量来接住结果,代码可以简化很多~
首先得明确:XSLT里的map是不可变对象,map:remove函数不会修改原有的$aMap,它只会返回一个移除了指定键的新map。如果你只是想生成这个新map但不需要把它输出到结果里,直接用匿名变量就行:
<xsl:if test="map:size($aMap) > 0"> <xsl:variable select="map:remove($aMap, map:keys($aMap)[1])"/> </xsl:if>
这样写和你原来的逻辑完全一致,但省去了给变量起名的步骤,看起来更清爽。
另外,如果你其实是想把移除元素后的新map赋值给另一个变量(比如后续要用到),那直接把它赋值给目标变量就行,根本不需要临时变量:
<xsl:variable name="newMap" select="if (map:size($aMap) > 0) then map:remove($aMap, map:keys($aMap)[1]) else $aMap"/>
这样一步就能得到处理后的新map,也不用额外的xsl:if块啦。
内容的提问来源于stack exchange,提问作者Litao Zhao
相关产品推荐
相关产品推荐

