【问题标题】:Issue while accessing Hashmap into XSL将 Hashmap 访问到 XSL 时出现问题
【发布时间】:2012-04-24 18:26:44
【问题描述】:

假设,我有一个 sn-p 的代码:

 Map mappingId = new HashMap();
 mappingId.put("1", "1000");
 transformer.setParameter("mappingId", mappingId);

 transformer.transform(...);

我有一个简单的 XSLT 尝试从中获取密钥

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
xmlns:map="xalan://java.util.Map"
extension-element-prefixes="map">

<xsl:param name="mappingId" />

<xsl:template match="/">
<xsl:variable name="id" select="map:get($mappingId, '1')" />
<MappedId><xsl:value-of select="id"/></MappedId>

</xsl:template>
</xsl:stylesheet>

我收到以下错误:

错误:'找不到方法 java.util.Map.get([ExpressionContext,] #STRING, #STRING) 致命错误:“无法编译样式表”。

有人可以帮我解决如何将 java 映射访问到 XSL 吗?

【问题讨论】:

  • 您能详细说明一下吗?我不明白。我已将我的 Map 对象重命名为 elementIdMap. 并将其作为参数传递。仍然出现同样的错误。
  • XSLT 参数可以是字符串、数字、布尔值或节点集 - 在我看来,在您的情况下,XSLT 处理器将映射转换为字符串 - 因此它正在寻找一个 get 函数字符串参数。我不熟悉 XSLT 的 Java 扩展,但我认为您必须先将映射转换为节点集,然后再将其传递给 XSLT。

标签: java xslt


【解决方案1】:

“id”参数必须通过附加 $ 来访问。以下 XSL 似乎为我提供了预期的输出 (java 1.6)。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:map="xalan://java.util.Map" extension-element-prefixes="map">

    <xsl:param name="mappingId" />

    <xsl:template match="/">
        <xsl:variable name="id" select="map:get($mappingId, '1')" />
        <MappedId>
            <xsl:value-of select="$id" />
        </MappedId>

    </xsl:template>
</xsl:stylesheet>

输出:

<?xml version="1.0" encoding="UTF-8"?>
<MappedId>1000</MappedId>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2017-04-08
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多