2011-08-11 61 views
1

我在XSLT文件中定義如下PARAMS:XSLT 1.0:有沒有辦法根據xslt中的另一個參數獲取參數的值?

<xsl:param name="language">E</xsl:param> 
<xsl:param name="headerTitle-E">English Title</xsl:param> 
<xsl:param name="headerTitle-F">French Title</xsl:param> 

如何顯示基於語言PARAM適當的頭?

工作:

<xsl:value-of select="concat('headerTitle','-',$language)" /> 

輸出 「headerTitle-E」,而不是 「英文片名」(這是我想要的)。

我試圖找到一個乾淨的解決方案,根據語言參數顯示適當的文本,而不必使用每個文本位的「選擇」塊。

任何想法?

回答

1

如果您現在參數在哪裏,您可以使用單個XPath。例如,試試這個:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

    <xsl:param name="language">F</xsl:param> 
    <xsl:param name="headerTitle-E">English Title</xsl:param> 
    <xsl:param name="headerTitle-F">French Title</xsl:param> 

    <xsl:template match="/"> 

     <xsl:value-of select="document('')/*/ 
      xsl:param[@name=concat('headerTitle-',$language)]"/> 

    </xsl:template> 

</xsl:stylesheet> 

但是我認爲這樣的任務應該是更好地完成利用比參數查找表。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:empo="lookup" 
    exclude-result-prefixes="empo" 
    version="1.0"> 

    <xsl:param name="language">F</xsl:param> 
    <empo:header name="headerTitle-E">English Title</empo:header> 
    <empo:header name="headerTitle-F">French Title</empo:header> 

    <xsl:template match="/"> 

     <xsl:value-of select="document('')/*/ 
      empo:header[@name=concat('headerTitle-',$language)]"/> 

    </xsl:template> 

</xsl:stylesheet> 

您可能還需要使用當前標題作爲變量,只需使用:

<xsl:variable name="Header" select="document('')/*/ 
    empo:header[@name=concat('headerTitle-',$language)]"/> 
+0

到目前爲止您嘗試了什麼?請提供反饋。 –

+0

對不起,延誤了。我無法實施您的解決方案,因爲我們的內部框架出於安全原因阻止了呼叫記錄(')。我實現的解決方案是從xsl文件調用服務器端函數,該文件基於鍵值對(在文件language.xml中)檢索文本。該函數然後根據查詢字符串「Language」返回正確的文本。 – http203

0

您可以使用XSLT 充分broadth內的xsl:PARAM和xsl:變量。所以,像這樣做:

<xsl:variable name="headerTitle"> 
    <xsl:choose> 
    <xsl:when test="$language = 'fr'"> 
     French 
    </xsl:when> 
    <xsl:otherwise> 
     English 
    </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 

<xsl:value-of select="$headerTitle" /> 

其實,選擇阻斷乾淨的解決方案,與分別創建幾十不需要變量。

+0

是的,我意識到這一點。但是有很多文本需要翻譯,所以我寧願每個標籤都沒有大塊代碼。有沒有辦法調用模板來設置變量文本?我也接受其他建議。 – http203

+0

@ beth26,檢查我的回答 –

+0

那麼,你可以使用自定義命名模板,然後使用'。除此之外,是的,你可以使用empo的答案。 – Boldewyn

相關問題