1

我在 xsl 中使用 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>

这就是我试图做的。任何帮助将不胜感激。

4

2 回答 2

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) = '')".

于 2013-04-09T19:51:08.903 回答
0

使用

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

上述单线使用的事实是,根据定义

number(true()) = 1

number(false()) = 0
于 2013-04-10T01:57:03.103 回答