xslt 2.0:使用HashMap

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xslt 2.0:使用HashMap相关的知识,希望对你有一定的参考价值。

我有一个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的值,它打印正常。

答案

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

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

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

以上是关于xslt 2.0:使用HashMap的主要内容,如果未能解决你的问题,请参考以下文章

XSLT 使用 xslt 2.0 或更高版本将纯文本文件处理为 XML

Visual Studio 不支持 XSLT 2.0

XSLT 2.0 - 如何用字符串替换'('和')'来清空?

XSLT 2.0 for 循环一个与其他 XML 中的数据匹配的 XML 节点

XSLT:无法将操作数转换为“结果树片段”

哪些浏览器支持 XSLT 2.0?