J'ai cherché tout autour pour trouver une solution à mon problème, mais je viens de recevoir plus de questions ...
Considérez le XML suivant: P>
<xsl:call-template name="staticName">
<xsl:with-param name="id" select="@id"/>
</xsl:call-template>
5 Réponses :
Si vous n'avez qu'un nombre fini de modèles possibles, cela fonctionnerait-il à utiliser un XSL si la construction pour sélectionner ce qu'il faut faire dans le modèle maître?
<xsl:if test="$templateName = 'name1'"> <xsl:call-template name="name1"/> </xsl:if>
Malheureusement, mon nombre d'événements possibles n'est pas petit. Bien que ce soit fini. Le problème énorme est que ce n'est pas regroupé tout dans un fichier
Eh bien, le problème est que je n'ai pas de disposition fixe pour le XML et que cela peut se produire dans plusieurs balises différentes (et plusieurs XML différents) avec l'ID pour l'identifier, et mon XSLT est trop générique pour pouvoir déterminer le nom. .. Jusqu'ici, le meilleur était la solution de contournement utilisant des paramètres.
Ce que vous essayez n'est pas directement possible, mais pourquoi pas simplement correspondre à la valeur de l'attribut code> code> en premier lieu? Si vous avez absolument besoin de l'indirection du modèle appelé, appelez-le à partir du modèle qui correspond à code> ID code> (voir nom4 code> ci-dessous): <t>name1name2name3name4</t>
Merci d'avoir répondu! Malheureusement, je n'ai pas d'un XML et cela peut arriver dans plusieurs étiquettes différentes (identifiées par le même ID), donc la mappage avec Dyn [@ ID = 'Name1'] rendrait mon code immense parce que je devrais mapper chaque étiquette Tous les fichiers XML
de http://www.w3.org/tr/xslt#named-Templates
La valeur du nom
nom code> est un QName , qui est étendu comme décrit dans [ 2.4 qualifié Noms ]. P> BlockQuote>Cela signifie que cela n'est ni une expression ni un AVT. p>
Explicit
XSL: Modèle d'appel CODE> Les instructions sont correctes, que ce soit selon les instructions logiques ou le motif correspondant comme: p>xxx pré> une autre approche est Références de modèle nommées ... p>
xxx pré> sortie: p>
xxx pré>
p>
note: strong>Parce que cette technique utilise
document ('') code> pour traiter le fichier XSLT plutôt que le fichier XML d'origine, le document original étant traité n'est pas disponible dans les modèles nommés. Cependant, vous pouvez explicitement passeractuel () code> comme paramètre sur les modèles si nécessaire: p>xxx pré> si nécessaire,
$ actuel code > Peut être utilisé pour accéder au document d'origine: p>xxx pré> si nécessaire,
$ Courant code> pourrait être rétabli en tant que nœud actuel en utilisantpour -aque code>: p>xxx pré> p>
Habituellement, lorsque quelqu'un essaie de le faire, cela signifie qu'elles ne sont pas au courant de la pleine puissance de XSL: des modèles de candidature. Le moyen de procéder à une expédition dynamique dans XSLT consiste à utiliser XSL: apply-modèles. Par exemple, pour le problème cité, écrivez des règles de modèle tels que , puis utiliser
Si vous utilisez l'ancien processeur Saxon-B ou Saxon-EE en tant que processeur XSLT, vous pouvez utiliser une extension saxonne pour obtenir des appels de modèles dynamiques:
<xsl:stylesheet xmlns:saxon="http://saxon.sf.net/" [...] >