【发布时间】:2018-10-24 10:11:56
【问题描述】:
我想在 XSLT 2.0 版本中将 Map 对象作为参数传递,并且我想使用 Saxon-HE 检索 XSLT 2.0 文件下的 Map 对象数据。
我google了很多,发现Retrieving hashmap values in XSLT
根据我的需要完全匹配的链接,但我遇到了异常,例如
表达式中的 {map:get($mapData,'1')} 出现静态错误 xsl:variable/@select 位于transformer.xslt 的第 23 行第 94 列: XPST0017:找不到名为 {http://ns.saxonica.com/map}get() 的 2 参数函数。
我不知道我在哪里做错了。
这些是我的文件。 SexsonDemo.java
public static void transform(String xmlFile, String xslFile) throws TransformerException,
TransformerConfigurationException {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource(new File(xslFile)));
Map<String,String> mapData = new HashMap<String,String>();
mapData.put("1", "188 E 6th Street");
transformer.setParameter("mapData", mapData);
transformer.transform(new StreamSource(new File(xmlFile)), new StreamResult(System.out));
}
转换器.xsl
xmlns:map="http://ns.saxonica.com/map" exclude-result-prefixes="map" >
<xsl:variable name="mapData"/>
<xsl:variable name="addressData" select="map:get($mapData,'1')"/>
在下面一行我得到异常
map:get($mapData,'1')
【问题讨论】:
-
那么您到底使用哪个版本的 Saxon HE?在 XSLT 3 中使用映射更容易,因为它有自己的
map(*)类型,您可以使用 saxonica.com/html/documentation9.8/javadoc/net/sf/saxon/s9api/… 和 saxonica.com/html/documentation9.8/javadoc/net/sf/saxon/s9api/… 从 Java Map 构造 XSLT/XPath 3 映射。 -
Hy Martin Honnen 感谢您的回复,我使用的是 Saxon HE-9.8.0-14 版本。
-
如何在 xslt 3.0 中读取地图对象?