2010-05-04 19 views
3

根據參數值,我需要包含兩種變體中存在的XSLT。 但是,似乎無法在xsl:include元素的href屬性中編寫表達式。我最後的審判看起來像這樣:如何在XSLT處理中使用xsl:include元素中的表達式

<的xsl:PARAM NAME = 「ML-FMT」 選擇= 「單聲道」/>

...
<的xsl:包括HREF =「{$毫升-fmt} /format.xsl「/>

使用XSLT引擎是撒克遜9.2.0.6

有任何人,我怎麼可以做一些接近的想法?

回答

1

由於Dimitre說過你不能這樣做,但你可以從頭開始生成XSLT文件,或者通過在準備轉換的代碼中插入節點來稍微修改現有的XSLT文件。

+0

我終於發現我可以構建一個XML參數文件,並使我的XSLT更加通用,以處理使用此參數文件中的值的不同情況。我得到了類似document(concat($ ml-fmt',' - param.xml')的正確參數文件... 然而,通用的事情導致了一個更復雜的XSLT。我認爲在某些時候它會是不合理的按照「通用方向」,因此,將XSLT作爲第一步組裝起來將是一個很好的方法。 感謝您的創造性答案! – addinquy 2010-05-06 06:58:15

1

您不能

如果您知道所有可能包含的xslt樣式表模塊,則可以使用xsl:use-when屬性來選擇性地僅包含其中的一部分。但是,xsl:use-when有其自身的侷限性。引述the XSLT 2.0 Spec

XSLT名稱空間的任何元件可以具有一個用時,其屬性值是可以靜態被評估的XPath表達式」。

的方式來實現動態包含,但它需要一些非XSLT初始化:

的代碼(認爲C#或Java或...您的編程語言)調用的轉變,可以編輯已加載(作爲XML)XSLT樣式表的DOM,並可以將任何<xsl:import>元素的href屬性的值設置爲所需的URL。

+0

謝謝。我終於明白,xsl:include是編譯時的東西,而參數是運行時! 就我所知,use-when看起來很有興趣,但也是編譯時,所以它不能在這裏完成這項工作,對吧?它讓我想起了C和C++的godd old #ifdef :) – addinquy 2010-05-06 06:45:41

+0

@addinquy:是的,你的理解或多或少是正確的。 – 2010-05-06 12:42:21

相關問題