识别XSLT中的null元素,即使在子元素中也没有值

时间:2012-08-28 11:10:06

标签: xslt xpath xslt-1.0

检查Null元素

<image><a><img src="abcd"/></a></image>

XSLT模板:

<xsl:if test="image!=''">
IMAGE HAS TEXT OR INNER ELEMENT
</xsl:if>

虽然“image”元素具有子元素,但我得到空白输出。理想情况下它不是空的。

我必须检查它应该具有值的条件或子元素。子元素可以是空的。

如何纠正这一点。

谢谢

3 个答案:

答案 0 :(得分:5)

使用

image[string() or node()]

仅当当前节点至少有一个true()子节点,其字符串值非空,或者有子节点(或两者)时,才会计算image

这可以简化为

 image[node()]

考虑到为了获得字符串值,元素必须在其子树中具有文本节点后代。

如果您希望字符串值image(如果有)不是全空白,请将上述第一个XPath表达式修改为:

image[normalize-space() or node()]

答案 1 :(得分:1)

使用<xsl:if test="image/node()">...</xsl:if>检查image元素是否具有任何类型的子节点或<xsl:if test="image/*">...</xsl:if>来测试image元素是否至少包含一个子元素。

答案 2 :(得分:0)

您可以使用它来检查任何子节点(文本,元素等)

<xsl:template match="image">
    <xsl:if test="node()">
        IMAGE HAS TEXT OR INNER ELEMENT
    </xsl:if>
</xsl:template>

或者你可以更具体:

<xsl:template match="image">
    <xsl:if test="a | text()">
        IMAGE HAS TEXT OR INNER ELEMENT
    </xsl:if>
</xsl:template>