2009-07-15 15 views
1

フレーム要素を、XSLT 2.0(Saxon 9.1.0.7)を使用してソースxmlファイルに処理したいとします。 フレーム要素は、私がフレームテンプレートから別の名前付きテンプレートにこれを送信する必要がレンダラ属性が含まれている場合は、それ以外の私は名前のテンプレートにデフォルトレンダラ値を送信したいと思います。名前付きテンプレートを呼び出す

だから、ソースXMLファイルに私は、パラメータとして命名テンプレートにデフォルト値を送りたい、その場合には以下のものを、持っている可能性があり:

<frame id="menu_frame_1"> 

あるいは、レンダラ属性の場合その後、私はデフォルトの代わりにそれを送りたい、ソースXMLドキュメントに定義されています

<frame id="menu_frame_1" renderer="KONtx.element.Container"> 

私が午前問題は、私は条件付きでデフォルト、または定義された属性のいずれかを選択する方法がわからないですそれが存在する場合名前付きテンプレートに渡します。 xslを使用してみました。コールテンプレート内でを選択しましたが、これは許可されていません。また、私はコールテンプレートの外に選択を移動し、デフォルトまたは属性値のいずれかで変数を設定しますが、変数は不変なので、そのケースの処理方法もわかりません。以下は、フレーム要素のテンプレートと、呼び出す名前のテンプレートです。どんな助けもありがとうございます。ありがとう。あなたが外<xsl:with-param>の代わりに、内部の<xsl:choose>を配置する必要があり

<xsl:template match="frame">  
    <!-- Call new object start named template below --> 
    <xsl:call-template name="newObjectStart"> 
     <xsl:with-param name="id"><xsl:value-of select="@id" /></xsl:with-param> 

     <xsl:choose> 
      <xsl:when test="@renderer"> 
       <xsl:with-param name="renderer"> 
        <xsl:value-of select="@renderer" /> 
       </xsl:with-param> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:with-param name="renderer">KONtx.element.Container</xsl:with-param> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:call-template> 

    ... 
</xsl:template> 

<!-- New Object Start Named Template --> 
<xsl:template name="newObjectStart"> 
    <xsl:param name="id" /> 
    <xsl:param name="renderer" /> 

    <xsl:text>var </xsl:text> 
    <xsl:value-of select="$id" /> 
    <xsl:text> = </xsl:text>  
    <xsl:text>new </xsl:text> 
    <xsl:value-of select="$renderer" /> 
    <xsl:text>({</xsl:text> 
</xsl:template> 

答えて

1

<xsl:template match="frame"> 
    <!-- Call new object start named template below --> 
    <xsl:call-template name="newObjectStart"> 
    <xsl:with-param name="id"> 
     <xsl:value-of select="@id" /> 
    </xsl:with-param> 
    <xsl:with-param name="renderer"> 
     <xsl:choose> 
     <xsl:when test="@renderer"> 
      <xsl:value-of select="@renderer" /> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="'KONtx.element.Container'" /> 
     </xsl:otherwise> 
     </xsl:choose> 
    </xsl:with-param> 
    </xsl:call-template> 

    ... 
</xsl:template> 
+0

を試してみて、これは動作し、完璧な理にかなっています。私はxsltの使い方を頭に入れようとしています。 – Steve

0

おかげでこの


<xsl:choose> 
     <xsl:when test="@renderer"> 
      <xsl:call-template name="newObjectStart"> 
       <xsl:with-param name="id"><xsl:value-of select="@id" /></xsl:with-param> 
       <xsl:with-param name="renderer"><xsl:value-of select="@renderer" /></xsl:with-param> 
      </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:call-template name="newObjectStart"> 
       <xsl:with-param name="id"><xsl:value-of select="@id" /></xsl:with-param> 
       <xsl:with-param name="renderer">KONtx.element.Container</xsl:with-param> 
      </xsl:call-template> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:call-template> 

... 

関連する問題