如何使用xsl:if检查元素值是否为空



我正在尝试实现一个xsl,其中只有当该元素存在并具有某些值时才选择xml中的节点:

我做了一些研究,我发现这个表达式可以在测试条件下使用:

<xsl:if test="/rootNode/node1" >
 // whatever one wants to do   
</xsl:if>

是只测试——>/rootNode/node1是否存在,还是同时检查node1的内容?我们如何检查这个表达式中node1的内容不应该为空呢?

下面的转换应该可以帮助您处理所有的情况。

如果node1的内容为文本,则可以使用text()进行检测。如果内容是任何元素,可以使用*进行检测。如果为空,可以添加条件not(node())。如果您想在node1本身不存在的情况下执行操作,请在根节点上添加not(node1)条件。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/rootNode/node1/text()">
has text
</xsl:template>
<xsl:template match="/rootNode/node1/*">
has elements
</xsl:template>
<xsl:template match="/rootNode/node1[not(node())]">
is empty
</xsl:template>
<xsl:template match="/rootNode[not(node1)]">
no node1
</xsl:template>
</xsl:stylesheet> 

您可以在xsl:if节点中应用相同的操作:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/rootNode">
        <xsl:if test="node1/text()">
        has text
        </xsl:if>
        <xsl:if test="node1/*">
        has elements
        </xsl:if>
        <xsl:if test="node1[not(node())]">
        is empty
        </xsl:if>
        <xsl:if test="not(node1)">
        no node1
        </xsl:if>
    </xsl:template>
</xsl:stylesheet> 

是只测试——>/rootNode/node1是否存在,还是同时检查node1的内容?

这是一个存在性检验。

我们如何检查这个表达式中node1的内容不应该是空的

如果元素存在,则不能为null。但是它可以是空的。对于元素来说,这意味着它没有子元素。

相关内容

  • 没有找到相关文章

最新更新