1

我有一个关于 XSLT 导入/包含的有趣问题。

我有 2 个具有相同规则的 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 中完成。

感谢帮助!

PS对不起,我真的很想了解这个网站上的格式规则,但我根本做不到:( gggrrr

4

1 回答 1

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>
于 2010-03-03T16:16:32.657 回答