xslt import / include 2 файла с одинаковым шаблоном - PullRequest
1 голос
/ 03 марта 2010

У меня есть интересный вопрос об импорте / включении 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>

Тем не менее, поскольку правила одинаковы в обеих включенных таблицах стилей, сводится к правилу «последний в первом», и в итоге я включаю только email.css.

Мне было интересно, можно ли сделать что-нибудь умное в этом случае?

Единственное, о чем я думал, это использовать другой режим, но тогда он не был бы настолько интуитивно понятным, как сбор кода всех идентичных правил. Не знаю, как и вообще можно ли это сделать в XSLT.

Спасибо за помощь!

P.S. Извините, я действительно пытаюсь понять правила форматирования на этом сайте, но я просто не могу :( gggrrr

1 Ответ

2 голосов
/ 03 марта 2010

Я думаю, вам лучше всего выбрать разные режимы шаблонов.

<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>
...