2012-04-12 3 views
3

にHashMapをアクセスしている間、私のように、コードのスニペットを問題を持っている:を想定するとXSL

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

transformer.transform(...); 

と、私はこの

<?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> 

からキーを取得しようとしたシンプルなXSLTを持っている私が取得します次のエラー:

エラー: 'java.util.Map.get([ExpressionContext、] #STRING、#STRING)メソッドが見つかりませんでした。 致命的なエラー:'スタイルシートをコンパイルできませんでした '。

誰かがXSLへのJavaマップへのアクセス方法を教えてくれますか?

+0

あなたは手の込んだていただけますか?理解できませんでした。私は、MapObjectオブジェクトをelementIdMapという名前に変更し、それをパラメータとして渡しました。まだ同じエラーが発生しています。 –

+0

XSLTのパラメータは、文字列、数値、ブール値、またはノードセットにすることができます。あなたのケースでは、XSLTプロセッサがマップを文字列に変換したように見えるので、文字列パラメータで 'get'関数を探しています。私はXSLTのJava拡張に慣れていませんが、XSLTに渡す前にマップをノードセットに変換する必要があると思います。 – MiMo

答えて

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> 
関連する問題