2013-01-21 46 views

回答

19

首先,在这里小心你的术语。你的意思是“节点”还是你的意思是“元素”。节点可以是元素,注释,处理指令的文本。

无论如何,如果你在这里的意思是元素,检查至少一个子元素存在,你可以这样做(假设你定位在这种情况下,节点元素。

<xsl:if test="*"> 

你意见提出只有“节点1”可以通过该if条件,所以要检查特定元素的存在,这样做

<xsl:if test="node1"> 
+0

感谢您的回答。我在这些术语中混淆不清。下次会更谨慎 –

3

在要测试的节点的情况下,这应该工作到测试节点是否具有孩子个元素

<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>的孩子节点的背景下讲话,但也许不是?匹配一个节点是

0

表达式是truthy,而那些不匹配任何表情falsy,所以:

<xsl:if test="node()"> 
    ... 
</xsl:if> 

然而,你的问题和隐含条件“只有节点1可以通过该if条件”是与示例不一致。 nodenode1都有子节点,所以如果条件都会通过这个。

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

0

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

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

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

相关问题