xslt import /包含具有相同模板的2个文件

时间:2010-03-03 11:13:47

标签: xslt import include rules operator-precedence

我在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

1 个答案:

答案 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>