7
votes

Comment appliquer des modèles à chaque noeud sélectionné dans A pour chacun?

Je sais que je manque quelque chose ici. Dans la transformation XSLT ci-dessous, le résultat réel ne correspond pas au résultat souhaité.

à l'intérieur du pour chacun , je veux appliquer le match = "piste" Modèle à chaque élément sélectionné Elément . Si j'ai compris correctement XSLT, avec la configuration actuelle, seuls les nœuds enfants de chaque élément de piste de chaque fichier sont correspondés à des modèles, pas de la piste de suivi eux-mêmes. < p> Comment puis-je faire les éléments piste passer par le modèle comme vous le souhaitez? Dois-je repenser l'approche entière?

Remarque: la transformation est exécutée à l'aide de PHP. Les déclarations XML ont été omises pour la brièveté.

document XML: xxx

xsl styleheet: xxx

résultat: xxx

résultat souhaité: < / strong> xxx


0 commentaires

4 Réponses :


4
votes

Je le restructurerais un peu (si vous n'avez pas besoin de tri de l'approche pour chaque permet d'approcher possible): xxx

Ceci semble plus court et plus au point, imho.

Je suppose que votre xxx

traverse tous les éléments de piste avec le pour chacun , et Applique ensuite les règles par défaut à ses descendants. Donc, le contenu du pour chacun a le même noeud de contexte que le modèle match = "piste" a, ainsi que le match = "piste" Modèle ne correspond jamais.

Si vous souhaitez vraiment utiliser le pour chacun de cette manière, vous devrez modifier l'une des deux éléments suivants de votre approche: < / p>

  1. Ajouter un nom = "piste" attribut au modèle match = "piste" modèle, puis utilisez de l'intérieur du pour chacun (mon idée et pire que TIM C 's)
  2. Utilisez la solution TIM C en utilisant . Cela a l'avantage d'éviter de nommer et de garder la possibilité de trier les pistes.

2 commentaires

La solution de restructuration semble moins modulaire que possible (cela ne me permet pas d'inclure également des pistes dans un

ou ailleurs sur la page / Site, du moins n'utilisant pas la même feuille de style), mais vous avez probablement raison en ce que c'est la solution la plus lisse pour cet exemple.


@Jakob Je suis conscient que c'est ancien, mais je veux juste souligner que vous pouvez utiliser l'attribut Mode pour sélectionner un autre modèle pour les mêmes nœuds. Comme et ... .



14
votes

Je serais d'accord avec "NDIM" que vous devriez probablement restructurer votre XSLT de supprimer le XSL: pour-chaque boucle.

Vous pouvez également modifier les modèles XSL: Apply-apply pour sélectionner le nœud de piste en cours dans Le XSL: pour chacun xxx

Garder le XSL: pour chacun, au moins, vous permettrait de trier les pistes dans une autre commande, si vous le souhaitez.


2 commentaires

Bonne prise sur le tri. Je suppose que c'est la meilleure solution, en raison du tri.


J'aurais pu assermenté j'ai déjà essayé cela, mais je suppose que non. C'est exactement ce que je cherchais, cependant!



0
votes

Je pense que l'utilisation d'applicatifs et de modes de modèle est la solution de nettoyage: xxx

donne: xxx


0 commentaires

0
votes

L'instruction pour chaque modifie le nœud de contexte de l'album à suivre. Les modèles d'application appellent par défaut applique des modèles aux nœuds enfants du nœud de contexte qui, dans votre cas, sont les nœuds enfants de l'élément de piste. D'où votre modèle qui correspond à "piste" ne fait jamais frapper.


0 commentaires