You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSLT中如何处理动态HashMap并根据Key获取对应List值

解决方案

首先你当前的变量声明写法存在语法问题,XSLT 3.0才支持原生映射(map)与数组(array)类型,针对动态Map的场景有两种正确的变量声明方式:

方式1:通过JSON字符串解析构造

如果你的Map结构是动态生成的JSON字符串,可以用parse-json函数解析为XSLT原生map类型,注意JSON内部引号需要转义避免和XSLT属性引号冲突:

<xsl:variable name="myMap" select="parse-json('{&quot;key1&quot;:[&quot;value1&quot;, &quot;value2&quot;], &quot;key2&quot;:[&quot;value2&quot;, &quot;value3&quot;]}')"/>

方式2:通过XSLT原生构造函数生成

如果是在XSLT内部动态构建Map,可以直接用内置的map、array构造函数,写法更规范:

<xsl:variable name="myMap" select="map{
  'key1': array{'value1', 'value2'},
  'key2': array{'value2', 'value3'}
}"/>

按Key获取对应List的实现方法

XSLT 3.0支持两种通用的Map取值写法:

简化问号语法

固定Key的场景可以直接在变量后加?加Key名取值:

<!-- 获取key1对应的List数组 -->
<xsl:variable name="key1List" select="$myMap?key1"/>

如果Key是动态存储在其他变量中,可以用?($变量名)的写法适配:

<xsl:variable name="targetKey" select="'key2'"/>
<!-- 动态获取key2对应的List数组 -->
<xsl:variable name="key2List" select="$myMap?($targetKey)"/>

标准map函数写法

也可以用官方提供的map:get函数实现取值,兼容性更强:

<xsl:variable name="key1List" select="map:get($myMap, 'key1')"/>

List数组的后续遍历操作

拿到数组后如果需要遍历所有元素,可以把数组转为序列后用普通xsl:for-each处理:

<!-- 遍历输出key1对应List的所有值 -->
<xsl:for-each select="$myMap?key1?*">
  <xsl:value-of select="."/>
</xsl:for-each>

注意:以上功能均基于XSLT 3.0版本实现,需要使用支持XSLT 3.0的处理器(如Saxon 9.8及以上版本)才能正常运行。

内容的提问来源于stack exchange,提问作者Lalit Chattar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 12:48:02