2011-05-03 104 views
1

我期待將多個xslt樣式表(V1.0)合併到一個樣式表中。遞歸合併多個XSLT樣式表

我已經看過發佈在這裏的類似問題。

Merge multiple xslt stylesheets

設在後答案的工作,但僅進口環節樣式表中的一個級別。

下面是提供的答案,這是實現這一目的。

<?xml version="1.0" ?> 
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        version="1.0"> 

    <xsl:template match="xsl:include"> 
     <xsl:copy-of select="document(@href)/xsl:stylesheet/*"/> 
    </xsl:template> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
     <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

我的xsl:進口參考下一層的進口樣式因此需要過於重新詛咒進口樣式表,否則,我只是得到了xsl:爲下一級的進口環節這擊敗了單個XSLT的對象。

剛開始創建單個XSLT不是一種選擇,因爲它們需要分開來管理內容版本控制。

有沒有人可以做到這一點?

回答

2

你不能簡單地用

<xsl:template match="xsl:include"> 
    <xsl:apply-templates select="document(@href)/xsl:stylesheet/*"/> 
</xsl:template> 

但是更換

<xsl:template match="xsl:include"> 
    <xsl:copy-of select="document(@href)/xsl:stylesheet/*"/> 
</xsl:template> 

,你說你要摺疊的xsl:import聲明以及XSL:包括。這樣做會改變你的代碼的語義。 (事實上​​,在xsl:includes中的合併也可能有一些小的副作用,這意味着包含模塊中的模板會受xsl:stylesheet中排除結果前綴等屬性的影響主要模塊的元素,並且失去所包含模塊中存在的任何此類屬性。)

+0

+1好答案。 – 2011-05-03 17:32:24

+0

謝謝,這工作。忽略xsl:import語句。我打算說xsl:include。 – Doomster 2011-05-04 07:01:57