<node>
<node1><node11/></node1>
<node2/>
</node>
我希望我的XSLT检查的xsl:如果至少有一个子节点存在
<xsl:if test="If at least 1 child node exists">
Only node1 can pass the if condition
</xsl:if>
感谢您的任何答复。
<node>
<node1><node11/></node1>
<node2/>
</node>
我希望我的XSLT检查的xsl:如果至少有一个子节点存在
<xsl:if test="If at least 1 child node exists">
Only node1 can pass the if condition
</xsl:if>
感谢您的任何答复。
首先,在这里小心你的术语。你的意思是“节点”还是你的意思是“元素”。节点可以是元素,注释,处理指令的文本。
无论如何,如果你在这里的意思是元素,检查至少一个子元素存在,你可以这样做(假设你定位在这种情况下,节点元素。
<xsl:if test="*">
你意见提出只有“节点1”可以通过该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>
止跌“T)。我以为你只是在<node>
的孩子节点的背景下讲话,但也许不是?匹配一个节点是
表达式是truthy,而那些不匹配任何表情falsy,所以:
<xsl:if test="node()">
...
</xsl:if>
然而,你的问题和隐含条件“只有节点1可以通过该if条件”是与示例不一致。 node
和node1
都有子节点,所以如果条件都会通过这个。
要严格限制为node1
,您必须确保模板上下文是否合适,或者检查相关节点是否为documentElement。
问题的措辞不清楚,但我认为你只是想处理具有自己带着小孩(即当前节点的孙子)的子节点
<xsl:template match="node">
do stuff for node
<xsl:apply-templates select="*[*]"/>
</xsl:template>
将只适用模板node1
因为它有一个子节点,它不会将模板应用于node2
。
感谢您的回答。我在这些术语中混淆不清。下次会更谨慎 –