2012-04-17 5 views
0

xsl(1.0)でパラメータを渡すことができません。 「選択」の内容を動的に変更することはできないようです。事前にxslt apply-template

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output cdata-section-elements="" encoding="UTF-8" indent="yes" method="xml" omit-xml-declaration="yes"/> 
    <xsl:param name="entity">CreditController[]</xsl:param> 
     <xsl:template match="/"> 
      <xsl:element name="variable"> 
        <xsl:attribute name="type">NameValuePair[]</xsl:attribute> 
         <xsl:apply-templates select="variable/*[@type='$entity']/item"/>      
      </xsl:element> 
    </xsl:template> 

    <xsl:template match="item">     
      <xsl:element name="item"> 
      <xsl:attribute name="type">NameValuePair</xsl:attribute> 
      <xsl:element name="value"> 
       <xsl:attribute name="type">String</xsl:attribute> 
       <xsl:value-of select="Code"/> 
      </xsl:element> 
      <xsl:element name="name"> 
       <xsl:attribute name="type">String</xsl:attribute> 
       <xsl:value-of select="Code"/>-<xsl:value-of select="Value"/> 
      </xsl:element> 
      </xsl:element> 
    </xsl:template> 

</xsl:stylesheet> 

ありがとう:以下はエラーをスローしますが$エンティティパラメータの認識に失敗しない試みがあります。他の投稿は、要素の 'Mode'属性を使用して設定することを推奨するように思われました。私はこれらのいずれかで勝てなかった。

エンティティ変数を文字列リテラル 'CreditController []'に置き換えると、正常に動作します。

+0

あなたの入力XMLのサンプルを投稿することができますか? –

+1

'@ type = $ entity'でなければならないのでしょうか? '$ entity'を引用符で囲むことで' $ entity'という文字列になります。 –

+0

アビラの答えは正しいと思います。答えとして受け入れられるはずです。 –

答えて

0

XPathに$entityを引用符で囲んで、文字列リテラル$entityにし、展開する変数ではありません。

引用符を削除します。

<xsl:apply-templates select="variable/*[@type=$entity]/item"/>