<node>
<node1><node11/></node1>
<node2/>
</node>
我希望我的 XSLT 检查
<xsl:if test="If at least 1 child node exists">
Only node1 can pass the if condition
</xsl:if>
感谢您的回复。
首先,请注意此处的术语。你的意思是“节点”还是“元素”。节点可以是元素、注释、文本或处理指令。
无论如何,如果您在这里确实是指元素,要检查至少存在一个子元素,您可以这样做(假设在这种情况下您位于节点元素上。
<xsl:if test="*">
您的评论表明只有“node1”可以通过 if 条件,因此要检查特定元素的存在,请执行此操作
<xsl:if test="node1">
在您正在测试的节点的上下文中,这应该可以测试节点是否具有子元素:
<xsl:if test="*">
Only node1 can pass the if condition
</xsl:if>
如果您实际上是指节点(包括文本节点),那么这将适用于包括文本节点:
<xsl:if test="node()">
Only node1 can pass the if condition
</xsl:if>
但<node>
也会通过这个测试(<node2>
不会)。我以为您只是在 's 子节点的上下文中说话<node>
,但也许不是?
匹配节点的表达式是真的,而不匹配任何东西的表达式是假的,所以:
<xsl:if test="node()">
...
</xsl:if>
但是,您的问题和隐含条件“只有 node1 可以通过 if 条件”与示例不一致。两者node
都有node1
子节点,所以两者都会通过这个 if 条件。
要将其严格限制为node1
,您必须确保模板上下文是适当的,或者检查有问题的节点不是 documentElement。
问题的措辞尚不清楚,但我认为您只想处理自己有子节点的子节点(即当前节点的孙子节点)
<xsl:template match="node">
do stuff for node
<xsl:apply-templates select="*[*]"/>
</xsl:template>
只会将模板应用于它,node1
因为它有一个子节点,它不会将模板应用于node2
.