我正在寫一個「擴展」模板的模板,但它有一些問題。如何編寫一個捕獲所有XSL模板,並通過所有參數?
<xsl:template match="*[@condition]" mode="#all">
<xsl:element name="condition">
<xsl:attribute name="name">
<xsl:value-of select="@condition"></xsl:value-of>
</xsl:attribute>
<xsl:apply-imports>
</xsl:apply-imports>
</xsl:element>
這個問題是使用模板<xsl:apply-imports>
缺少參數。 參數列表未知,因爲此模板試圖擴展許多不同的模板(因此mode="#all"
)。
有沒有一個很好的解決方法呢?
附加例如:
考慮兩個最終模板(只讀):
<xsl:template match="*" mode="mode1">
<param name="p1"/>
</xsl:template>
<xsl:template match="*" mode="mode2">
<param name="p2"/>
</xsl:template>
他們被地方稱爲(只讀):
<xsl:apply-templates mode="mode1">
<xsl:with-param name="mode1" select="$mode1"/>
</xsl:apply-templates>
<xsl:apply-templates mode="mode2">
<xsl:with-param name="mode2" select="$mode2"/>
</xsl:apply-templates>
可能存在是mode1,mode2,mode3,mode4 ...的100s,名稱沒有模式。
我想有一個全局模板,包裹最終模板的附加信息。例如:
<xsl:template match="*" mode="#all">
<xsl:next-match/>
</xsl:element>
問題是上述全局模板沒有將參數傳遞給模板。
感謝您的回答。這部分是問題。還有另一個問題 - 參數的名稱也是未知的,也就是說,名稱=「foo」是未知的,並且存在各種模板,它們會採用各種參數。無法找到每個模板並列出所有參數。 – Jason 2012-01-13 14:37:53
@Jason:無需在每個模板中聲明隧道參數,就在您使用它們時。 – 2012-01-13 18:07:50
我剛剛添加了另一個更完整的示例。我希望這能說明我在找什麼。關鍵是模板是隻讀的,調用者文件也是隻讀的。我只能以某種方式擴展模板。 – Jason 2012-01-13 19:41:17