2013-02-04 116 views
0

我試圖在XSLT中的foreach語句中插入一個if-else語句。 的想法是,如果節點存在,將插入一個一行break.This是我到目前爲止XSLT:做一個if-else內部的foreach

<xsl:for-each select="Books/Publisher/[BookTitle]"> 
        <strong> 
        <xsl:value-of select=" BookTitle " /> 
        </strong> 
<xsl:if test=" Books/Publisher/BookTitle">!= ''"> 
     <br/> 
     </xsl:if> 
</xsl:for-each> 

的問題是,當我插入換行符標籤不出現的if-else語句,但只有當我完全刪除if時才能工作。有人向我解釋爲什麼會發生這種情況,因爲我已經檢查了節點在那裏,並且插入換行符應該可以工作。因此,必須存在if-else內容的錯誤foreach循環。

+0

下面是文章[#1] [1],這是值得一讀 [1]:http://stackoverflow.com/questions/5169140/how-to-implement-if-else-if-else-condition-in- xll –

+0

JLRishe給了你正確的代碼,但並沒有告訴你你做錯了什麼。您忘記了xsl:for-each會更改上下文,特別是用於評估相對路徑表達式的上下文項。 –

回答

2

我想你會爲是這樣的:

<xsl:for-each select="Books/Publisher[BookTitle]"> 
    <strong> 
    <xsl:value-of select="BookTitle" /> 
    </strong> 
    <xsl:if test="BookTitle != ''"> 
    <br/> 
    </xsl:if> 
</xsl:for-each> 

但是,如果我理解正確的話,它看起來像所有你真正想做的是輸出的所有非空白的書名,然後換行符,所以也許這將是一個更好的辦法:

<xsl:for-each select="Books/Publisher/BookTitle[. != '']"> 
    <strong> 
    <xsl:value-of select="." /> 
    </strong> 
    <br/> 
</xsl:for-each> 

或者更好的是:

<xsl:apply-templates select="Books/Publisher/BookTitle[. != '']" /> 

<!-- ..... (separate template in the XSLT) --> 
<xsl:template match="BookTitle"> 
    <strong> 
    <xsl:value-of select="." /> 
    </strong> 
    <br/> 
</xsl:template> 
+0

謝謝。那是我一直在尋找的東西。 – someguy