2011-04-19 72 views
1

我有一個xsl:param,我試圖用來做一個屬性模板匹配。通過我在這裏和互聯網上找到的一切,我正確地做到了這一點。但是,我的輸出是空白的。我的<xsl:param>有什麼問題?

這裏是我的XSLT

<xsl:param name="strm_name">main</xsl:param>  
<xsl:template match="stream[@name='{$strm_name}']"></xsl:template> 

如果我硬編碼帕拉姆調用「主」,這工作得很好。
這裏是XML標籤我試圖以匹配..

<doc><stream name="main"></stream></doc> 

任何幫助,非常感謝!

+0

請問您分享您的源xml如何看起來像?沒有它,很難弄清楚哪裏出了問題...... – rekaszeru 2011-04-19 20:28:31

+0

這是XSLT 1.0嗎?如果是這樣,您不能在匹配模式中使用變量引用。 – 2011-04-19 20:34:30

+0

我已經添加了我試圖匹配的源XML標記。 – Jeff 2011-04-19 20:40:19

回答

0

我看到兩個問題:

  1. 不能使用一個變量或參數參考匹配模式在XSLT 1.0
  2. 於斷言引用您的參數時,你不需要周圍'{...}'。 (你可能有一個屬性值模板混淆這一點。),而不是使用這樣的:stream[@name=$strm_name]

問題#1可能的解決方法是隻選擇那些符合您的PARAM控制的條件的元素。 (您可以可以在選擇表達式中引用param)。

例如,該樣式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" /> 
    <xsl:param name="strm_name" select="'main'"/> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="/*/stream[@name=$strm_name]" /> 
    </xsl:template> 
    <xsl:template match="stream"> 
     <xsl:apply-templates /> 
     <xsl:text>/</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

適用於本文件:

<root> 
    <stream name="main">1</stream> 
    <stream name="other">2</stream> 
    <stream name="main">3</stream> 
    <stream name="main">4</stream> 
    <stream name="other">5</stream> 
    <stream name="other">6</stream> 
</root> 

...僅匹配期望的節點。輸出:

1/3/4/ 
+0

這是我的問題:stream [@ name = $ strm_name]。我刪除了{'...'}並且它工作正常!謝謝!!語法句法! ;) – Jeff 2011-04-19 20:53:02

+0

+1正確。根據OP的評論,強化**你可以在XSLT 2.0 **中完成這一事實...... – 2011-04-19 23:17:13