<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>
感谢您的回复。
答案 0 :(得分:26)
首先,请在此处注意您的术语。你的意思是“节点”或者你的意思是“元素”。节点可以是元素,注释,文本或处理指令。
无论如何,如果你在这里指的是元素,要检查至少有一个子元素存在,你可以这样做(假设在这种情况下你被定位在节点元素上。
<xsl:if test="*">
您的评论建议只有“node1”可以传递if条件,因此要检查特定元素是否存在,请执行此操作
<xsl:if test="node1">
答案 1 :(得分:5)
在您正在测试的节点的上下文中,这应该可以测试节点是否具有子元素:
<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>
不会)。我以为你只是在<node>
的子节点的上下文中讲话,但也许不是?
答案 2 :(得分:0)
与节点匹配的表达式是真实的,而与任何内容不匹配的表达式都是假的,所以:
<xsl:if test="node()">
...
</xsl:if>
但是,您的问题和隐含条件“只有node1可以传递if条件”与示例不一致。 node
和node1
都有子节点,所以如果条件都会传递它们。
要严格限制为node1
,您必须确保模板上下文合适,或者检查相关节点是否为documentElement。
答案 3 :(得分:0)
问题的措辞不清楚,但我认为你只想处理自己有孩子的子节点(即当前节点的孙子)
<xsl:template match="node">
do stuff for node
<xsl:apply-templates select="*[*]"/>
</xsl:template>
只会将模板应用于node1
,因为它有一个子节点,它不会将模板应用于node2
。