2010-03-03 5 views
1

У меня есть интересный вопрос об импорте/включении XSLT.xslt import/include 2 файла с тем же шаблоном

У меня есть 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> 

Так что в зависимости от тип документа I вставляет правильные файлы 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

+0

Вы должны определить требуемое поведение более тесно. В каких обстоятельствах вы хотите, чтобы один шаблон запускался, и при каких обстоятельствах другой? – Tomalak

+0

@Tomalak, дело в том, что в таблице стилей, где я включаю как receipt.xsl, так и email.xsl (это просто библиотека шаблонов) Я хочу, чтобы оба шаблона выполнялись. Но согласно правилу Last-in-first, тот же шаблон выполняется для последней включенной таблицы стилей, ei для email.xsl. Мне было интересно, есть ли умный способ убедиться, что оба шаблона из receipt.xsl и email.xsl могут быть выполнены. Или мне нужно использовать другой режим? Имеет ли смысл? – DashaLuna

+0

Какова цель в атрибуте «режим» в существующем коде; поэтому оба шаблона определяются с помощью mode = 'extraStyle'; и как они вызывают? –

ответ

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>