xslt 2.0:使用HashMap

问题描述 投票:-1回答:1

我有一个java方法,返回一个映射到xslt。

XSLT方法调用 -

<xsl:variable name="mapValue" select="class:returnMap()">

Java方法 -

public Map<String,List<String>> returnMap(){
    Map<String,List<String>> map = new HashMap<String,List<String>>();
    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("2");
    map.put("a",list);
    map.put("b",list);
    return map
}

如何在XSLT 2.0中获取地图的列表值?我尝试使用以下格式将值分配给变量,

<xsl:variable name="valueOfA" select="$mapValue/entry[@key='a']"/>
<xsl:variable name="valueOfB" select="$mapValue/entry[@key='b']"/>

但是,我得到了以下例外。

XPTY0019: Required item type of first operand of '/' is node(); supplied value has item type java:java.util.LinkedHashMap

如果我尝试显示$ mapValue的值,它打印正常。

xslt xslt-2.0
1个回答
0
投票

错误消息显示您正在使用Saxon。 Java对象和XPath值之间的转换规则取决于您使用的处理器,因此这是相关的。

如果您正在使用Saxon,那么您可以访问XSLT 3.0以及新的地图/数组数据类型,这意味着您可以在不调用Java的情况下实现您要实现的目标。

您获得的具体错误是因为(如消息所示)$ mapValue不是节点,因此您无法使用“/”运算符访问其子节点。如果您使用的是XSLT 3.0地图,那么您可以使用例如$mapValue?a访问条目。

© www.soinside.com 2019 - 2024. All rights reserved.