2017-10-04 12 views
0

J'ai un fichier XSL qui utilise un fichier XML. Le fichier XSL doit afficher les informations trouvées dans le document XML deux fois, mais légèrement différemment à chaque fois.Comment puis-je appliquer un modèle par son nom?

Comment puis-je déclarer différents modèles qui ont le même match, mais préciser quel modèle je veux être appelé lors de l'utilisation <xsl:apply-templates select="...">...</>

+3

On dirait que vous pourriez être en mesure d'utiliser l'attribut 'mode' (https://www.w3.org/TR/xslt#modes) Bien que pour donner une réponse plus précise, vous pouvez éditer votre question pour montrer un échantillon de votre XML et la sortie que vous attendez. Merci. –

+1

Puisque vous avez spécifiquement demandé des noms de modèles, j'observe que les modèles peuvent en effet avoir des noms. L'accès au modèle par nom est servi par l'action 'xsl: call-template', mais pas (directement) par' xsl: apply-templates'. Si vous voulez remplacer les règles de priorité normales pour choisir entre différents modèles qui correspondent au même nœud lorsque vous appliquez 'apply-templates', alors vous avez la dimension' mode' avec laquelle jouer, comme @TimC l'a déjà dit. –

Répondre

2

Comment puis-je déclarer différents modèles qui ont le même match, mais préciser quels modèle que je veux être appelé en utilisant ...

Utiliser les modes. Dans la règle de modèle:

<xsl:template match="xyz" mode="mode1"/> 

Dans les apply-templates appellent:

<xsl:apply-templates select="abc" mode="mode1"/> 

Lors de la recherche de la règle de modèle « meilleur ajustement », ne sont considérés que les règles de modèle dans le mode approprié.

Les modes sont disponibles dans toutes les versions XSLT. Dans XSLT 3.0, vous pouvez déclarer des propriétés d'un mode, par exemple

<xsl:mode name="mode1" streamable="yes" on-no-match="fail"/>