2012-10-05 36 views
1

我有很多xslt文件,它們有時包含某些相同對象的完全重複信息。是否有可能將它帶到另一個xslt並將其包含在現有的內部?如何做到這一點?帶有重複信息的xslt集

回答

2

<xsl:include>有助於模塊化XSLT代碼,但本身並不刪除重複的代碼。

一個XSLT的最根本的特徵 - templates - 如果使用得當,可以顯著消除任何代碼重複

  1. 模板的匹配模式不同類型的節點匹配其上模板將被應用 - 當在處理相同匹配模式的不同實例的許多地方使用相同的代碼時,這消除了重複。雖然可以使用類似於函數/子例程的方式調用模板,但使用<xsl:apply-templates> - 選擇匹配的模板更加強大和靈活 - 後者類似於在OOP中調用基本類型的虛擬函數 - 我們不知道執行時將存在哪些派生對象,以及相應虛擬函數中可能有多少特化(覆蓋)中的哪些將被選中執行。

  2. 上述技術與相結合,將參數傳遞給模板有助於消除只有一些值/節點不同的重複代碼。

  3. 使用模板可以模擬高階函數(HOF)並將模板/函數作爲參數傳遞給另一個模板/函數,並返回模板函數作爲應用模板/函數的結果。可以使用功能組合和部分應用程序動態創建新功能。 FXSL庫爲XSLT 1.0和XSLT 2.0實現HOF。

  4. 在即將到來的XPath 3.0/XSLT 3.0中,HOF是該語言的標準功能。函數可以作爲參數傳遞並作爲結果返回給其他函數。匿名(內聯)函數可以在XPath 3.0表達式中動態創建。新的標準XPath 3.0函數fold-left()fold-right()map()是通常在任何函數式編程語言中使用的最基本的函數。它們的使用可以顯着減少代碼大小和代碼重複。

+0

很好的解釋;我個人使用僅用於所需變量的長列表; +1 – Peter

+0

@Peter,是的,XSLT模板和模式匹配是一個非常強大的功能 - 通常在其他語言中缺少。 –