如何用XSL检查一个值是空还是空?

例如,如果categoryName为空?我使用的是“当选择”结构。

例如:

<xsl:choose>
    <xsl:when test="categoryName !=null">
        <xsl:value-of select="categoryName " />
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="other" />
    </xsl:otherwise>
</xsl:choose>

当前回答

来自Empty Element:

测试某个节点的值是否为空

这取决于你对空的定义。

不包含子节点:not(node()) 不包含文本内容:not(string(.)) 除空格外不包含任何文本:not(normalize-space(.)) 除了注释之外什么都不包含:not(node()[not(self::comment())])

其他回答

使用简单的categoryName/text()这样的测试工作良好<categoryName/>和<categoryName></categoryName>。

<xsl:choose>
    <xsl:when test="categoryName/text()">
        <xsl:value-of select="categoryName" />
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="other" />
    </xsl:otherwise>
</xsl:choose>

实际上,我发现它更好的只是测试字符串长度,因为很多时候字段不是空的,只是空的

< xsl:当测试= " - length (field-you-want-to-test) < 1 >

前两个处理空值,后两个处理空字符串。

<xsl:if test="USER/FIRSTNAME">
    USERNAME is not null
</xsl:if>
<xsl:if test="not(USER/FIRSTNAME)">
    USERNAME is null
 </xsl:if>
 <xsl:if test="USER/FIRSTNAME=''">
     USERNAME is empty string
 </xsl:if>
 <xsl:if test="USER/FIRSTNAME!=''">
     USERNAME is not empty string
 </xsl:if>

关于什么?

test="not(normalize-space(categoryName)='')"

来自Empty Element:

测试某个节点的值是否为空

这取决于你对空的定义。

不包含子节点:not(node()) 不包含文本内容:not(string(.)) 除空格外不包含任何文本:not(normalize-space(.)) 除了注释之外什么都不包含:not(node()[not(self::comment())])