Xslt 如何检查节点是否为空

Xslt 如何检查节点是否为空,xslt,Xslt,我试图创建一个变量,它告诉我node1是否包含某些内容。节点1可以是空元素,也可以包含属性。但现在我想知道,当node1为空时,如何实现答案“false” <xsl:variable name="elementHasData"> <xsl:choose> <xsl:when test="node1 != ''"> <xsl:value-of select="true()"/> <

我试图创建一个变量,它告诉我node1是否包含某些内容。节点1可以是空元素,也可以包含属性。但现在我想知道,当node1为空时,如何实现答案“false”

<xsl:variable name="elementHasData">
    <xsl:choose>
        <xsl:when test="node1 != ''">
            <xsl:value-of select="true()"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:value-of select="false()"/>
        </xsl:otherwise>
    </xsl:choose>
</xsl:variable>

检查
节点1
是否包含文本或其他子节点:

<xsl:variable name="elementHasData" select="node1/node()" />


您可以在XSLT 2.0中尝试这一点:

<xsl:variable name="elementHasData" select="if (node1[node()]) then 'true()' else 'false()'"/>

如果您需要检查任何节点或任何属性,则可以转到此处

<xsl:variable name="elementHasData" select="if (node1[@* | node()]) then 'true()' else 'false()'"/>

8行
xsl:choose
是不必要的,并且也使得
$elementHasData
是一个节点片段,而不是布尔值。你应该这样做:
<xsl:variable name="elementHasData" select="if (node1[node()]) then 'true()' else 'false()'"/>
<xsl:variable name="elementHasData" select="if (node1[@* | node()]) then 'true()' else 'false()'"/>