我正在尝试实现一个xsl,其中只有当该元素存在且具有某个值时,才会选择xml中的节点:
我做了一些研究,我发现这个表达可以用于测试条件:
<xsl:if test="/rootNode/node1" >
// whatever one wants to do
</xsl:if>
它会测试是否存在 - &gt; / rootNode / node1 only或者也检查node1的内容?我们如何检查此表达式中node1的内容,它不应该为null。
答案 0 :(得分:8)
以下转换应该可以帮助您处理所有情况。
如果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>
答案 1 :(得分:1)
它会测试是否存在 - &gt; / rootNode / node1 only或者也检查node1的内容?
这是一种存在测试。
我们如何检查此表达式中node1的内容,它不应为null。
如果元素存在,它不能为空。但它可以为空。对于元素,这意味着它没有子元素。