2011-01-14 70 views
1

我有下面的XML过滤节点()

<Categories> 
<cat>Video</cat> 
<cat>Audio</cat> 
<cat>Hybrid</cat> 
</Categories> 

在我的XSL,我想过滤“音频”和节点的其余部分传递给调用模板,这需要节点作为一个的参数。如何实现这一点。

我试了下面,但没有运气。

尝试1:

<xsl:call-template name='xx'> 
<xsl:with-param name='nodes' select="/Categories/cat[text()='Hybrid' or 'Video']"/> 
</xsl:call-template> 

尝试2:

<xsl:call-template name='xx'> 
<xsl:with-param name='nodes' select="/Categories/cat[text()='Hybrid' or text()='Video']"/> 
</xsl:call-template> 

尝试3:

<xsl:call-template name='xx'> 
<xsl:with-param name='nodes' select="/Categories/cat[contains(text(),'Hybrid,Video']"/> 
</xsl:call-template> 

它的工作原理,如果我只是一个值象下面

<xsl:call-template name='xx'> 
<xsl:with-param name='nodes' select="/Categories/cat[text()='Video']"/> 
</xsl:call-template> 

提前致谢。

回答

1

我想过滤“音频”和 其余节点传递到主叫 模板

你的第二个表达应该是:

/Categories/cat[text()='Hybrid' or text()='Video'] 

不过,我会用:

/Categories/cat[.!='Audio'] 

/Categories/cat[not(.='Audio')] 
+0

/Categories/cat [text()='Hybrid'或text()='Video'],表达式不起作用。同时,我不能使用/Categories/cat[.!='Audio'],因为我有多个值需要被抑制。 – satish 2011-01-14 17:55:54

0

这种方法运行良好。

/Categories/cat[. ='Hybrid' or . ='Video'] 

感谢您的帮助。

+0

在提供的输入样本中,`text()`与`self :: node()`字符串值没有区别。如果真的如此,那么你没有提供一个很好的例子...... – 2011-01-14 18:49:49