2011-01-14 137 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