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
XSLT 2.0 - 如何用字符串替换'('和')'来清空?