2010-02-16 49 views
2

所以, 我有一個XSLT模板,期望一個節點設置爲參數,並將其用作顯示文本。然而,有時候這個節點是在XML空的,我想通過默認顯示文本,而不是顯示文本顯示不出來,而不是:將字符串傳遞到期望節點的模板參數?

作品:

<xsl:call-template name="myTemplate"> 
    <xsl:with-param name="parm1" select="//element"> 
</xsl:call-template> 

不起作用:

<xsl:variable name="dispText"> 
    <xsl:choose> 
     <xsl:when test="string-length(//element) = 0"> 
      <xsl:value-of select="'Default Text'" /> 
     </xsl:when> 
     <xsl:otherwise> 
      <xsl:value-of select="//element" /> 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 

<xsl:call-template name="myTemplate"> 
    <xsl:with-param name="parm1" select="$dispText"> 
</xsl:call-template> 

任何想法,我怎麼能做到這一點?我已經嘗試了各種各樣的東西沒有運氣:(

看來我需要做的就是創建一個新的節點與我想要的顯示文本,但我不知道這是甚至可能嗎?

感謝

回答

2

實現的默認處理在模板中,因爲這就是它的屬性,調用方應該是一致的,並且不會對模板行爲產生副作用(即,你不應該「忘記」pa在默認值中輸入)。

<xsl:template name="myTemplate"> 
    <xsl:param name="parm1" /><!-- node set expected! --> 

    <!-- actual value or default --> 
    <xsl:variable name="value1"> 
    <xsl:choose> 
     <xsl:when test="not($parm1 = '')"> 
     <xsl:value-of select="$parm1" /> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:value-of select="$default1" /> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:variable> 

    <!-- work with $value1 from this point on --> 
</xsl:template> 
0

我猜//元素上有一個節點集,並使用字符串長度()可能是無效的。請嘗試轉換爲字符串()第一?

+0

'string-length()'在節點集上有效。它測量集合中第一個節點的字符串表示。 – Tomalak

相關問題