2009-07-14 56 views
0

好的,我很難過。我想測試發送給XSLT模板的參數是否包含句點,如果不包含,則輸出引號。我想測試的參數是下面模板中的「值」。看來包含函數應該可以工作,但由於某些原因,無論「值」的內容如何,​​引號總是被輸出。我究竟做錯了什麼?謝謝XSLT「包含」檢查期限的函數

<!-- Add a JSON property --> 
<xsl:template name="addProperty"> 
    <xsl:param name="name" /> 
    <xsl:param name="value" /> 

    <xsl:value-of select="$name" /> 
    <xsl:text>:</xsl:text> 
    <xsl:if test="not(contains($value,'.'))">'</xsl:if> 
    <xsl:value-of select="$value" /> 
    <xsl:if test="not(contains($value,'.'))">'</xsl:if> 
    <xsl:text>,</xsl:text>  
</xsl:template> 
+0

您可以粘貼一些投入,一些預期產出和一些實際產出? – Welbog 2009-07-14 17:01:22

回答

1

當我打電話給你的模板,它工作正常。你打電話過得怎麼樣?這是我用什麼:

<xsl:call-template name="addProperty"> 
    <xsl:with-param name="name" select="'abc'"/> 
    <xsl:with-param name="value" select="'123'"/><!-- quoted number --> 
</xsl:call-template> 
<xsl:call-template name="addProperty"> 
    <xsl:with-param name="name" select="'abc'"/> 
    <xsl:with-param name="value" select="123"/><!-- NOT quoted number --> 
</xsl:call-template> 
<xsl:call-template name="addProperty"> 
    <xsl:with-param name="name" select="'xyz'"/> 
    <xsl:with-param name="value" select="'456.789'"/><!-- quoted number --> 
</xsl:call-template> 
<xsl:call-template name="addProperty"> 
    <xsl:with-param name="name" select="'xyz'"/> 
    <xsl:with-param name="value" select="456.789"/><!-- NOT quoted number --> 
</xsl:call-template> 

這是我得到的輸出:

abc:'123',abc:'123',xyz:456.789,xyz:456.789, 

你能不能在價值觀傳遞給你認爲你是路過的命名模板?你在使用什麼XSLT引擎?

一個很好的方法來測試,這是對這樣的事情添加到您指定的模板,看看它產生的,如果你沒有一個很好的調試方便:

XXX<xsl:value-of select="$value"/>XXX 
YYY<xsl:value-of select="contains($value, '.')"/>YYY 
ZZZ<xsl:value-of select="not(contains($value, '.'))"/>ZZZ 
+0

你是對的。我只是意識到我是個白癡。用我想測試的輸入來調用不同的模板。抱歉,添麻煩了。 – Steve 2009-07-14 17:04:01