2010-03-03 9 views
1

J'ai une question intéressante sur XSLT import/include.xslt importer/inclure 2 fichiers avec le même modèle

J'ai 2 fichiers XSLT avec la même règle.

Réception XSLT: (est géré par lui-même)

<xsl:template match="Booking" mode="extraStyle"> 
<link rel="stylesheet" href="../css/receipt.css" type="text/css" media="screen"/> 
</xsl:template> 

XSLT EmailCommon: (sert bibliothèque de modèles pour le courrier électronique docs, est pas géré par lui-même)

<xsl:template match="Booking" mode="extraStyle"> 
    <link rel="stylesheet" href="../css/email.css" type="text/css" media="screen"/> 
</xsl:template> 

Alors que, selon le type de document que j'insère les fichiers CSS corrects.

Ce que je suis en train de faire est d'inclure ces deux documents dans une autre 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> 

Néanmoins, parce que les règles sont les mêmes dans les deux inclus stylesheets cela se résume à la Dernière règle en premier et je finis seulement en incluant email.css.

Je me demandais si quelque chose d'intelligent pouvait être fait dans ce cas? La seule chose que je pensais est d'utiliser un mode différent, mais alors ce ne serait pas aussi intuitif, plutôt que d'accumuler le code de toutes les règles identiques. Je ne sais pas comment et si cela pourrait être fait dans XSLT.

Merci pour votre aide!

P.S. Désolé, je suis vraiment essayer de comprendre les règles de ce site sur formating, mais je ne peux tout simplement pas :(gggrrr

+0

Vous devez définir Dans quelles circonstances souhaitez-vous que le modèle soit exécuté, et dans quelles circonstances l'autre? – Tomalak

+0

@Tomalak, la chose est que dans la feuille de style où j'inclue à la fois receipt.xsl et email.xsl (c'est juste une bibliothèque de modèles) Je veux que les deux modèles soient exécutés Mais selon la règle Last-in-first, le même modèle est exécuté pour la dernière feuille de style incluse, ei pour email.xsl Je me demandais s'il y avait une façon intelligente de s'assurer que les deux templates de receipt.xsl et email.xsl peuvent être exécutés. Ou aurai-je besoin d'utiliser un mode différent? Est-ce logique? – DashaLuna

+0

À quoi sert l'attribut 'mode' dans le code existant? c'est pourquoi les deux modèles sont définis avec mode = 'extraStyle'; et comment sont-ils invoqués? –

Répondre

2

Je pense faire les modes de modèle différent est votre meilleure option.

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