2013-01-16 51 views
0

我在xsl中有一種情況,我有一個參數值,將在xslt轉換中分配一些參數值。但是我把這個參數作爲一個字符串,該參數可能包含一個無限[0或更多次重複]的節點。我如何將每個param用作任何xpath表達式所使用的任何其他xml內容。如何使用參數值作爲xpath for for each for xslt

這裏是我的樣品個XML: RetreiveData.xml

<soap-content> 
------ 
<return> 
<!--0 or more repetitions>--> 
<data> 
<startdate>12-12-12</startdate> 
<enddate>12-12-13</enddate> 
<nooftrans>5</nooftrans> 
</data> 
<data> 
---- 
</data> 

</soap=content> 

這是將被作爲參數去XSL

XSL文件我的樣本文件:

<xsl style> 
<param name ="retrieve"></param> 
--- 
<xsl:for-each ="$retreive/return/data"> 
----do strufff 
</xsl:for-each> 


This was throwing an error . How can i travese to a node if it is param ? 

我知道這可以通過使用分配給xml文件中的路徑的變量來完成。但是我的方案中提出了這種方法。

任何一個可以幫助我解決在推動這一

感謝, Eresh

+0

最有可能的是,錯誤是由於你的'for-each'標籤格式不正確。您需要使用'select'屬性名稱:'xsl:for-each select =「$ retreive/return/data」>此標籤格式錯誤:'',您的'param'元素缺少其名稱空間前綴。 – JLRishe

+0

有人投我倒在上面的代碼中提到的錯誤(謝謝你,你搖滾),但錯誤仍然存​​在:'param'被聲明爲「檢索」並用作「retreive」。 –

+0

您使用XSLT1.0還是XSLT2.0? –

回答

0

這將有助於如果您發佈的代碼是很好形成XSLT,但猜測你的意思,那麼如果$檢索是單您可以執行的元素名稱

<param name ="retrieve"></param> 
--- 
<xsl:for-each select="*[name()=$retrieve]/return/data"> 
----do stuff 
</xsl:for-each> 

請注意,XPath變量保存的值不是表達式的片段。如果$retrieve保留字符串"root"那麼$retrieve/return/data不是root/return/data/它是"root"/return/data這是一種語法/類型錯誤,因爲它在大多數語言中。如果在c或fortran中有一個字符串「x」,則表達式「x」+ 1不會將變量 x加1。爲此,您需要在運行時提供XPath解析器。有些產品具有擴展功能(並且XPath 3提供了評估函數)。但對於簡單情況,上述內容避免了需要將字符串評估爲XPath。