2013-01-22 46 views
0

因此,我將XML feed轉換爲HTML,並使最終用戶能夠選擇3種配色方案之一。根據所選擇的顏色方案,我試圖將值賦給將呈現XML的調用模板命令中的參數。XSL 1.0 - 在調用模板中動態選擇一組變量

我是相當新的XSL可以隨意指向我一個更好的方法

這裏是我的代碼示例:

<xsl:template match="/"> 

<xsl:variable name="basic_head_title_color">#414141</xsl:variable> 
<xsl:variable name="basic_head_title_size">18px</xsl:variable> 
<xsl:variable name="basic_head_desc_color">#8b8b8b</xsl:variable> 

<xsl:variable name="contrast_head_title_color">#ffffff</xsl:variable> 
<xsl:variable name="contrast_head_title_size">18px</xsl:variable> 
<xsl:variable name="contrast_head_desc_color">#e1e1e1</xsl:variable> 

<xsl:variable name="black_head_title_color">#ffffff</xsl:variable> 
<xsl:variable name="black_head_title_size">18px</xsl:variable> 
<xsl:variable name="black_head_desc_color">#e1e1e1</xsl:variable> 

<xsl:when test="$display_theme = 'basic'" > 
    <xsl:variable name ="chosen_head_title_color" select="basic_head_title_color"/> 
    <xsl:variable name ="chosen_head_title_size" select="basic_head_title_size"/>   
    <xsl:variable name ="chosen_head_desc_color" select="basic_head_desc_color"/>     
</xsl:when> 

<xsl:when test="$display_theme = 'contrast'" > 
    <xsl:variable name ="chosen_head_title_color" select="contrast_head_title_color"/> 
    <xsl:variable name ="chosen_head_title_size" select="contrast_head_title_size"/>   
    <xsl:variable name ="chosen_head_desc_color" select="contrast_head_desc_color"/> 
</xsl:when> 

<xsl:when test="$display_theme = 'black'" > 
    <xsl:variable name ="chosen_head_title_color" select="black_head_title_color"/> 
    <xsl:variable name ="chosen_head_title_size" select="black_head_title_size"/>   
    <xsl:variable name ="chosen_head_desc_color" select="black_head_desc_color"/> 
</xsl:when> 


    <xsl:call-template name="render_xml"> 
      <xsl:with-param name="head_title_color" select="chosen_head_title_color" /> 
      <xsl:with-param name="head_title_size" select="chosen_head_title_size" /> 
      <xsl:with-param name="head_desc_color" select="chosen_head_desc_color" /> 
    </xsl:call-template> 

</template> 

回答

2

你的XSLT是在一些地方無效,但如何是這個?

<xsl:param name="display_theme" select="'basic'" /> 

    <v:styles xmlns:v="transform-variables"> 
    <style name="basic" titleColor="#41414" titleSize="18px" descColor="#8b8b8b" /> 
    <style name="contrast" titleColor="#ffffff" titleSize="18px" descColor="#e1e1e1" /> 
    <style name="black" titleColor="#ffffff" titleSize="18px" descColor="#e1e1e1" /> 
    </v:styles> 

    <xsl:template match="/"> 

    <xsl:variable name="style" select="document('')//style[@name = $display_theme]" /> 

    <xsl:call-template name="render_xml"> 
     <xsl:with-param name="head_title_color" select="$style/@titleColor" /> 
     <xsl:with-param name="head_title_size" select="$style/@titleSize" /> 
     <xsl:with-param name="head_desc_color" select="$style/@descColor" /> 
    </xsl:call-template> 

    </xsl:template> 
+0

這看起來天才,我會試着在今天下午得到這個功能,並讓你知道它是否有效。感謝您的快速回復! – DigitalMC

+0

它的工作!把我的代碼從936行降到268 ...好吧,我的朋友playd。 – DigitalMC