2012-08-31 93 views
0

我一直在開發兩個xsl(比如說A和B)文件。 A.xsl依賴於B.xsl。並且在B.xsl文件中,我對某些元素進行了硬編碼,之後它應該取決於A.xsl。無論如何遞歸檢查這兩個xsl文件。使用遞歸xsl文件

有沒有辦法做到這一點。或者如果不是?如果不適用,請說出你的答案。

這裏我介紹了轉換xml文件,其中大多數xml元素是常見的,然後我認爲要開發一個xsl文件,它具有一個模板的共同元素,並使用include從其他xsl文件調用它。但是,我在一個元素具有必要的硬編碼的地方停滯不前,然後再次使用通用的xsl。下面是例子:這個例子是通用的,我不想在每次使用其他許多xsls開發時使用通用xsl文件進行硬編碼。

這是輸入xml的示例。

<element> 
    <subelement></subelement> 
</element> 

這是輸出xml的示例。

<element> 
    <element2></element2> 
    <subelement></subelement2> 
</element> 

這是A.xsl

<xsl:inculde href="B.xsl"> 
<xsl:call-template name="ele"/> 

這是B.xsl

<xsl:template name="ele"> 
<xsl:copy-of select="element"/> 
</xsl:template> 
+3

我真的不明白你的意思。你想調用A.xsl,其中包含B.xsl,包括A.xsl itsef?我認爲這個鏈接可能有所幫助:http://www.apply-templates.com/blog/xsl-include-vs-import –

+1

像你這樣的reeks需要一個C.xsl。但是你可以更詳細地陳述你的問題。 –

+0

「檢查這兩個xsl文件」是什麼意思?而當你說「把其他的xsl文件介於兩者之間」時......介於什麼和什麼之間? – LarsH

回答

1

您A.xsl和B.xsl是依賴的意思這不是完全清楚但聽起來好像您可能正在尋找一種方法來維護兩個或更多樣式表,用於兩個轉換任務,這兩個轉換任務有許多共同的行爲,但在某些方面有所不同。

爲了具體,我會假設你有兩個轉換,我會稱之爲紅色和綠色(以避免與A和B混淆,它們可能是也可能不是完全相同的東西),其具有以下特性:

  • 許多元素(比如元素C1,C2,... Cn)在兩次轉換中的處理方式都是相同的。
  • 某些元素(D1,D2,... Dn)的處理方式不同。
  • 此外,可能存在僅在紅色變換的輸入中可見的元素R1,R2,... Rn以及僅在輸入到紅色變換的輸入中看到的G1,G2,... Gn綠色變革。

有幾種方法可以在XSLT中構建紅色和綠色變換。最簡單的兩個解釋是這些。 (1)製作三個樣式表:C.xsl(用於常用元素),R.xsl(用於R元素和D元素的紅色變換),G.xsl(用於G元素的綠色變換)和D元素)。 R.xsl和G.xsl分別包含或導入C.xsl,因此具有單一處理方法的通用元素的代碼僅在一處編寫和維護。

(2)製作兩個樣式表。 Red.xsl定義完整的Red轉換;它涵蓋了常見元素C1,C2等,具有不同處理的元素(D1,D2等)以及紅色變換(R1,R2等)特有的元素。它什麼都不輸入。

Green.xsl導入Red.xsl幷包含D和G元素的模板。因爲它沒有C元素的模板,所以C元素在Green變換中的處理方式與Red變換中的處理方式相同。因爲Green.xsl是Green轉換的主要樣式表,所以D元素的Green.xsl模板對於相同元素的優先級高於Red.xsl模板。 R元素的模板也將被導入,但由於輸入中不存在R元素,因此它們不會匹配,也不會造成傷害。

你需要在任何好的參考書(或XSLT規範,這是完全可讀技術散文)讀了哪些xsl:importxsl:include元素,在xsl:templatepriority屬性,導入優先的概念。