2012-04-12 39 views
3

假設,我有一個代碼段爲:問題,同時訪問哈希映射成XSL

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?

+0

能否請你解釋一下?我不明白。我已將Map對象重命名爲elementIdMap.and並將其作爲參數傳遞。仍然得到相同的錯誤。 – 2012-04-12 12:07:58

+0

XSLT參數可以是字符串,數字,布爾值或節點集 - 在我看來,在您的情況下,XSLT處理器將地圖轉換爲字符串 - 因此它正在尋找帶字符串參數的「get」函數。我不熟悉XSLT的Java擴展,但我認爲在將它傳遞給XSLT之前,必須將您的映射轉換爲節點集。 – MiMo 2012-05-15 12:51:53

回答

0

必須通過追加$來訪問「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>