2013-04-09 60 views
1

我在使用xsl中的if/else條件時遇到了問題。在下面的代碼片段中,我有一個從數據庫值中獲取其值的表。最初,我的代碼看起來像如何使用If/Else在表格上選擇默認值

<fo:table-body> 
         <xsl:for-each select="//ROWSET3_ROW"> 
          <fo:table-row> 
           <fo:table-cell xsl:use-attribute-sets="cell"> 
            <fo:block> 
             <xsl:value-of select = "MODIFICATION_NUMBER" /> 
            </fo:block> 
           </fo:table-cell> 
           <fo:table-cell xsl:use-attribute-sets="cell"> 
            <fo:block> 
             <xsl:value-of select = "STATUS_DATE" /> 
            </fo:block> 
           </fo:table-cell> 
. 
. 
.... 

凡MODIFICATION_NUMBER,STATUS_DATE,和其他屬性來從XML表:

<ROWSET3> 
<ROWSET3_ROW> 
    <MODIFICATION_NUMBER>0</MODIFICATION_NUMBER> 
    <SURVEY_JOB_STATUS_ID /> 
    <STATUS_DATE>5/13/2008</STATUS_DATE> 
    <STATUS_NOTES /> 

在某些情況下,也有在數據庫中,這些值空值,所以我試圖把條件放在那些沒有值的列上。所以,如果選擇的值是NULL,那麼在那裏放一個隨機字符,比如' - '。我的代碼似乎沒有工作

<fo:table-cell xsl:use-attribute-sets="cell"> 
            <fo:block> 
             <xsl:value-of select = "30" /> 
             <xsl:choose> 
              <xsl:when test = "STATUS_NOTES != ''"> 
               <xsl:value-of select = "STATUS_NOTES"/> 
              </xsl:when> 
               <xsl:otherwise> 
               <xsl:value-of select = "blank" /> 
               </xsl:otherwise> 
               </xsl:choose> 
            </fo:block> 
           </fo:table-cell> 

這是我試圖做的。任何幫助將不勝感激。

+0

'值的選擇=「BL ank「會插入當前模式中名爲'blank'的第一個子元素的值(或者在更可能的情況下沒有這個元素的情況下爲空字符串)。如果你想讓文字字符串「空白」而不是使用'xsl:text',或者只用'空白' – 2013-04-09 19:55:27

+0

如果OP想要使用' - ',他需要寫' ' – Hanno 2013-04-09 19:58:44

回答

0
<xsl:choose> 
    <xsl:when test = "STATUS_NOTES"> 
     <xsl:value-of select = "STATUS_NOTES"/> 
    </xsl:when> 
    <xsl:otherwise> 
     <xsl:value-of select = "blank" /> 
    </xsl:otherwise> 
</xsl:choose> 

如果STATUS_NOTES是一個空元素,這將起作用。如果它也可以包含空字符串,則可以使用test="not(normalize-space(STATUS_NOTES) = '')"

0

使用

<xsl:value-of select= 
     "Concat(STATUS_NOTES, substring('blank', 6 - 5*boolean(STATUS_NOTES)))"/> 

上面一行程序使用以下事實:由定義

number(true()) = 1 

number(false()) = 0