xsl:如果至少存在一个子节点

时间:2013-01-21 09:10:19

标签: xslt xpath

<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>

感谢您的回复。

4 个答案:

答案 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条件”与示例不一致。 nodenode1都有子节点,所以如果条件都会传递它们。

要严格限制为node1,您必须确保模板上下文合适,或者检查相关节点是否为documentElement。

答案 3 :(得分:0)

问题的措辞不清楚,但我认为你只想处理自己有孩子的子节点(即当前节点的孙子)

<xsl:template match="node">
 do stuff for node
  <xsl:apply-templates select="*[*]"/>
</xsl:template>

只会将模板应用于node1,因为它有一个子节点,它不会将模板应用于node2