7
votes

Modèle d'appel XSLT avec QName dynamique?

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>


0 commentaires

5 Réponses :


1
votes

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>


2 commentaires

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.



0
votes

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>


1 commentaires

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



8
votes

de http://www.w3.org/tr/xslt#named-Templates

La valeur du nom nom est un QName , qui est étendu comme décrit dans [ 2.4 qualifié Noms ].

Cela signifie que cela n'est ni une expression ni un AVT.

Explicit XSL: Modèle d'appel Les instructions sont correctes, que ce soit selon les instructions logiques ou le motif correspondant comme: xxx

une autre approche est Références de modèle nommées ... xxx

sortie: xxx


note:

Parce que cette technique utilise document ('') 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 passer actuel () comme paramètre sur les modèles si nécessaire: xxx

si nécessaire, $ actuel Peut être utilisé pour accéder au document d'origine: xxx

si nécessaire, $ Courant pourrait être rétabli en tant que nœud actuel en utilisant pour -aque : xxx


0 commentaires

1
votes

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 xxx

, puis utiliser pour faire le Dépat.


0 commentaires

3
votes

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/" [...] >


0 commentaires