检查XSLT中的字符串是否为空或为空

如何使用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>

test="categoryName != ''"

编辑 :这涵盖了最可能的解释,在我看来,从这个问题推断出来的“[not] null或empty”,包括它的伪代码和我自己早期的XSLT经验。 也就是说,“以下Java的等价物是什么?”:

!(categoryName == null || categoryName.equals(""))

有关更多详细信息,例如,明确识别空对空,请参阅下面的johnvey的答案和/或我从该答案改编的XSLT'小提琴',其中包括迈克尔凯评论中的选项以及第六种可能的解释。


在没有任何其他信息的情况下,我将假设以下XML:

<group>
    <item>
        <id>item 1</id>
        <CategoryName>blue</CategoryName>
    </item>
    <item>
        <id>item 2</id>
        <CategoryName></CategoryName>
    </item>
    <item>
        <id>item 3</id>
    </item>
    ...
</group>

示例用例如下所示:

<xsl:for-each select="/group/item">
    <xsl:if test="CategoryName">
        <!-- will be instantiated for item #1 and item #2 -->
    </xsl:if>
    <xsl:if test="not(CategoryName)">
        <!-- will be instantiated for item #3 -->
    </xsl:if>
    <xsl:if test="CategoryName != ''">
        <!-- will be instantiated for item #1 -->
    </xsl:if>
    <xsl:if test="CategoryName = ''">
        <!-- will be instantiated for item #2 -->
    </xsl:if>
</xsl:for-each>

从空的元素:

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

这取决于你的意思是空的。

  • 不包含子节点: not(node())
  • 不包含文字内容: not(string(.))
  • 不包含除空白之外的文本: not(normalize-space(.))
  • 除注释外not(node()[not(self::comment())])包含任何内容: not(node()[not(self::comment())])
  • 链接地址: http://www.djcxy.com/p/87205.html

    上一篇: Check if a string is null or empty in XSLT

    下一篇: Convert a string representation of a hex dump to a byte array using Java?