2009-02-10 53 views
8

基本上我想有一個xslt成爲我的'基'xslt,並希望將其鏈接到子xslt文件。我可以將xslt鏈接到另一個xslt嗎?

這可能嗎?

目標是減少代碼重複。

我們將會對各類客戶很多孩子XSLT文件都用自己的格式和其他文本等,不想重複基本代碼爲每個客戶端XSLT。

我知道我們可以根據客戶的類型進行格式化,但這會使xslt混亂。 理想情況下,就像每個客戶的客戶相關代碼一樣。

這不是xslt的做法嗎?我是xslt的新手!

回答

14
<xsl:import href="library/utility-include.xsl" /> 

href路徑是相對於當前的xsl文件。 <xsl:import/> documentation

請記住,您必須編寫導入行作爲<xsl:stylesheet><xsl:transform>的第一個子元素。它們不能出現在整個文件中。

10

由於所有其他的答案已經指定,有兩個XSLT指令

<xsl:import>

<xsl:include>

設計恰好提供這種能力。

您可能會感興趣的是,有完整的庫模板和函數可以在內部導入庫的其他樣式表。庫的樣式表旨在導入用戶的XSLT樣式表中。

例如,確實有看FXSL library在XSLT函數式編程。

4

所有其他的答案給你足夠的信息,
我想提一個更重要的事情在這裏..你甚至可以「通過(這兩種方式)參數」兩(主叫和被叫之間的文件,如果他們需要共享的任何數據)XSLT文件..
此功能在播放/ XSLT之外版本1.0,您可能需要在未來的重要作用..
:)

0

是的,你可以使用標籤在不同的XSLT拉:

<xsl:include href="OtherTemplate.xslt" /> 

有幾個陷阱!所以要小心!

「父級」XSLT將緩存包含的XSLT。因此,如果您對嵌套/包含的XSLT進行更改 - 它不會在父XSLT轉換中直接顯示。我「認爲」這可能與使用XslCompiledTransform有關 - 但不是100%。無論如何,如果您修改父級XSLT,它將刷新緩存。 (這在某些項目中是一個非常惱人的問題)

其次,您可能會遇到$ currentPage參數的問題。它只能在整個XSLT樣式表中聲明一次 - 包括任何「包含」!所以請小心你引用元素的地方!參考here

相關問題