2010-03-19 56 views
1

我對XSL比較陌生,我認爲這是一個基本問題。所以我最好早日得到我的道歉!Xpath和參數

基本上,我想使用一個值函數。這將在一個模板中,我想將xpath的一部分作爲參數傳遞。

<xsl:variable name="TEST_VAR">"h:elementA/elementB"</xsl:variable> 

... and then use the variable (or passed in param) as all (or part) of the xpath: 

<xsl:element name="transformedElement"><xsl:value-of select=$TEST_VAR/></xsl:element> 

我真的希望有xpath是字符串文字和TEST_VAR的混合物。提前

回答

2

你想要做什麼

由於無法做到的。您不能將純字符串解釋爲XSL轉換中的XPath表達式。

但是,不管怎樣,你都不應該這樣做。通過它的外觀,你可以用下面的更換你的例子得到你想要的東西:

<xsl:variable name="TEST_VAR" select="h:elementA/elementB"/> 
<xsl:element name="transformedElement"> 
    <xsl:value-of select="$TEST_VAR"/> 
</xsl:element> 

但我懷疑你的例子簡單化到它太簡單,看你真正想要的點。


這裏有一個快速提示使用堆棧溢出:短語你對你真正需要做的,爲什麼您無法這樣做的問題。你對這個問題所做的一切都是針對你的問題的解決方案,如果可能的話,你會問Stack Overflow。這不是,而且由於我看不到你原來的問題,我無法比你更早地幫助你。

下次您提出問題時,請務必提出有關您面臨的問題的實際問題,而不是您面臨的問題的潛在解決方案。這樣你會得到更好的答案。

+0

感謝您的快速回答。這是我第一次嘗試堆棧溢出,所以你的建議是讚賞。 – Daniel 2010-03-19 16:22:27

0

將所需的XPath表達式作爲全局<xsl:param>傳遞。如果這個全局參數的名稱是vQuery那麼你可以使用這樣的代碼

<xsl:element name="transformedElement"> 
    <xsl:value-of select= 
    "*[name() = substring-before($vQuery, '/')] 
       /*[name() = substring-after($vQuery, '/')]"/> 
</xsl:element> 

這種技術通常需要你有很多關於XPath表達式將傳遞知識。在這種情況下,它依賴於這樣一個事實:這是一個相對的XPath表達式,它只有兩個位置步驟,並且沒有謂詞。