for-each imbriqués[resolu] - XML/XSL - Programmation
Marsh Posté le 12-10-2006 à 10:46:02
Le seum moyen que j'ai trouvé, c'est de copier le noeud courant du premier "for-each" dans une variable (avec node-copy)
Puis de la rappeler dans ma boucle imbriquée à l'aide d'un "msxsl:node-set()" (fonction proprio Microsoft, son équivalent existe dans la plupart des parseurs XSL 1 sous cette forme (mais autre préfixe) puisque la version XSL 2.0 comprend cette fonction)
-- Edit
Si t'as besoin juste d'une donnée (et non de tout le noeud) alors tu peux utiliser une simple variable toute bête évidement...
Marsh Posté le 12-10-2006 à 10:53:20
le problème avec une variable toute simple c'est qu'on ne peut pas la modifier. au début c'est ce que j'avais pensé faire mais ça ne marche pas.
je vais me renseigner sur comment utiliser les "nodes" Merci.
Marsh Posté le 12-10-2006 à 11:06:06
pkoi tu veux modifier ta variable ?
|
=> Ca doit faire ce que tu veux normalement...
Marsh Posté le 12-10-2006 à 11:10:24
ah oui.... désolé. mais je pensé pas qu'en la déclarant à l'intérieur ça fonctionnait comme une variable locale... oui effectivement comme ça ça marche. j'ai que 2 3 variable donc je pense que je faire ça. merci beaucoup.
Comment galérer des heures pour un petit rien....
Marsh Posté le 12-10-2006 à 11:48:56
faut dire que le XSL, c'est un peu tellement limité qu'on butte même sur les trucs simple en se disant que ça peut pas marcher
Marsh Posté le 12-10-2006 à 21:32:41
MagicBuzz a écrit : faut dire que le XSL, c'est un peu tellement limité qu'on butte même sur les trucs simple en se disant que ça peut pas marcher |
XSL est Turing-complete, donc d'un point de vue théorique on peut tout faire. Partant de là, il ne reste plus qu'à trouver comment... et ça peut parfois être trèèèès compliqué.
Marsh Posté le 13-10-2006 à 09:40:42
avander a écrit : le for-each c'est mal... |
tu veux faire quoi à la place ?
des apply-template ?
et tu gères comment les notions d'imbrication justement ? parceque là pour le coup, tu ne peux pas utiliser de variable...
-- quoique nan j'ai rien dit, c'est vrai qu'on peut passer des paramètres à un applytemplate
Marsh Posté le 13-10-2006 à 10:46:21
MagicBuzz a écrit : tu veux faire quoi à la place ? |
Ben voila! Non sans déconner, le for-each est souvent utilisé de façon abusive, par 'paresse' ou par 'facilité alors que le méchanisme à la base des transformations est justement là pour faciliter le travail.
Fais le test, un stylesheet avec juste un template pour le root avec un apply-templates dedans, en sortie tu retrouve toutes les données de ton xml sans avoir rien fait!
Ce qui veut dire que le moteur fait un travail considérable et l'idée c'est d'exploiter ce travail facilement.
Un template générique pour filtrer tout ce qui nous intéresse pas, un template pour livre et un pour auteur et en avant!
Beacoup vont argumenter en disant: mais c'est pas performant! Dans la pratique on s'en tape un peu que l'ordi mouline peu ou pas, du moment que le travail est fait.
Un article intéressant concernant l'approche push et pull pour résoudre un problème en XSL-T http://www.xml.com/pub/a/2005/07/06/tr.html
Marsh Posté le 13-10-2006 à 14:00:14
en fait, j'utilise le template comme "template" justement.
et pour les sous-traîtements à l'intérieur d'un bloc, c'est vrai que je ne m'en sert que rarement (peut-être à tord) car je trouve que sémantiquement, je n'utilise pas un sous-bloc.
en tout cas, c'est sûr qu'il y a certainement moyen de faire mieux que mes usines à gaz
|
Marsh Posté le 14-10-2006 à 12:27:43
respect pour ton 'usine à gaz'
tu généres les pages de ton site à partir d'xml c'est bien ça? Intéressant.
Marsh Posté le 16-10-2006 à 10:42:40
avander a écrit : respect pour ton 'usine à gaz' |
En fait, c'est plus compliqué que ça
J'ai une feuille XML qui indique quelles requêtes exécuter, avec quelles sous-requêtes exécuter, etc. Ca me génère un gros fichier XML. Et je transforme de fichier en XSL.
Le but de la manoeuvre, c'est de faire un site 100% générique et qui ne demande pas autrechose que de connaître le SQL et XML (pas de développement).
Marsh Posté le 16-10-2006 à 10:56:36
Ca donne ça :
Une "vue" :
|
Ici, une requête qui permet de retrouver la liste des employés (ou un seul, selon si on utilisera le filtre "ALL" ou "ID" ).
Une "page" :
|
On appelle donc les différentes vues dont on a besoin, en indiquant sur quels élément faire le lien pour les sous-requêtes.
Grace au tag "template", on sait donc quel XSL appliquer là-dessus (ici, c'est le XSL que j'ai mis en exemple).
Après l'analyse de la "page", on obtiens en fait un flux XML de ce type (assez simple à parser, faut juste s'y retrouver dans les imbrications )
|
Ce qui après transformation donne dans mon cas un beau calendrier comme outlook dans lequel on voit qui est affecté où quel jour, le tout étant facilement modifiable grâce à la clause "updatable" de la "vue" : en récupérant automatiquement l'éventuelle PK associée aux données retournées par la requête, on est en mesure de traîter automatiquement les valeurs modifiées
Genre :
http://magicsite.manga-torii.com
=> Sur la première page tu peux ajouter/supprimer/modifier des données dans le tableau. Bah c'est 100% sans une ligne de code (c'est bien pratique )
Marsh Posté le 12-10-2006 à 10:40:38
Salut à tous, je débute en xsl/xml et j'aurais une petite question qui sera peut-être idiote mais bon tampis:
voila j'ai deux boucles for-each imbriquées et je ne sais pas comment récupérer les données de la première à l'intérieur de la seconde:
j'ai:
<xsl:for-each select="$livre">
<xsl:for-each select="$auteur">
<!-- Comment récupérer le titre du livre ici? -->
</xsl:for-each>
</xsl:for-each>
Dans une boucle simple j'y arrve, j'arrive par exemple à récupérer le nom de l'auteur. avec <xsl:value-of select="nom"/> mais comment faire pour le titre du livre?
Le titre du livre n'est qu'un exemple, j'ai besoin de ça dans d'autre cas. mais j'ai pris le plus simple.
Merci d'avance.
Message édité par OyT le 12-10-2006 à 11:15:52