我在XSLT import / include上有一个有趣的问题。
我有两个具有相同规则的XSLT文件。
收据XSLT :(由自己运行)
<xsl:template match="Booking" mode="extraStyle">
<link rel="stylesheet" href="../css/receipt.css" type="text/css" media="screen"/>
</xsl:template>
EmailCommon XSLT :(作为电子邮件文档的模板库,不单独运行)
<xsl:template match="Booking" mode="extraStyle">
<link rel="stylesheet" href="../css/email.css" type="text/css" media="screen"/>
</xsl:template>
因此,根据文档类型,我插入正确的CSS文件。
我要做的是将这两个文档包含在另一个XSLT中:
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl"
version="1.0">
<xsl:include href="receipt.xsl"/>
<xsl:include href="email.xsl"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
尽管如此,因为两个包含的样式表中的规则相同,所以它归结为Last-in-first规则,最后我只包括email.css。
我想知道在这种情况下是否可以做一些聪明的事情?
我唯一想到的是使用不同的模式,但它不会那么直观,而是会对所有相同规则的代码进行准确。不知道如何以及是否可以在XSLT中完成。
感谢您的帮助!
P.S。对不起,我真的想了解这个网站上的格式化规则,但我根本不能:( gggrrr
答案 0 :(得分:2)
我认为使模板模式不同是最佳选择。
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl"
>
<xsl:include href="receipt.xsl"/>
<xsl:include href="email.xsl"/>
<xsl:template match="Booking">
<xsl:apply-templates select="." mode="extraStyleReceipt" />
<xsl:apply-templates select="." mode="extraStyleEmail" />
</xsl:template>
</xsl:stylesheet>