2012-12-09 51 views
1

我有一個簡單的問題。你如何結合兩個模板參數的路徑?我願做這樣的事情:從XSLT中的兩個參數組合路徑

<xsl:template match="*[namespace-uri()='show:show']"> 
<xsl:param name="arg1"/> 
<xsl:param name="arg2"/> 
<tr> 
    <td> 
    <xsl:value-of select="concat($arg1,$arg2)"/> 
    </td> 
</tr> 

得到像路徑:ARG1/arg2的,但它不工作。我該如何正確地做到這一點?
或者你能折騰喜歡

<xsl:value-of select="path/path/$arg2"/> 


ARG1是從根和ARG2完整路徑是單一元素名稱。

+0

是你的ARG1和arg2的要合併完整路徑表達式或者他們只是單個元素的名字呢? –

+0

arg1是從根目錄的完整路徑,而arg2是單個元素名稱 – Sayid

回答

2

要構建路徑表達式爲字符串,然後評估他們需要的擴展功能(至少在XSLT 1.0和2.0),沒有什麼核心規範,以支持它但大多數處理器提供了合適的功能。表達

<xsl:value-of select="concat($arg1,'/',$arg2)"/> 

將導致含有的arg1字符串值,斜線,以及arg2字符串值的字符串。但是,如果Arg1一個節點設置的,你限制ARG2是隻是一個元素名,那麼你可以做這樣的事情

<xsl:value-of select="$arg1/*[local-name() = $arg2]"/> 

(或copy-of如適用),並呼籲像

<xsl:with-param name="arg1" select="/path/to/interesting/stuff" /> 
<xsl:with-param name="arg2" select="'elementname'" /> 

如果模板你想允許ARG2命名屬性而不是一個元素使用

$arg1/@*[.....] 

或者允許它是(假設目標3210沒有屬性子元素名稱相同)

$arg1/node()[......] 
+0

謝謝!你幫了我很多:) – Sayid

0

你可以這樣做

<xsl:value-of select="concat($arg1,'/',$arg2)"/> 
+0

謝謝,但我只能得到「arg1 /」。我指的是路徑中元素的內容,保存在arg1中以「/」 – Sayid

+0

結尾,可能無法獲得您可能arg2爲空。做 vels4j

+0

我只是用包裹了我的 Sayid