IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

[XSL - XPATH?] Deux for-each, une variable et un noeud


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut [XSL - XPATH?] Deux for-each, une variable et un noeud
    Bonjour!

    Je suis bloqué au point de vue syntaxe sur un template xsl.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:for-each select="xml/request/list/*">
    		[...]
    	    	<xsl:variable name="nodeName" select="." />
    	    	<xsl:for-each select="/xml/filter/page/filterList/filter/fieldList/field">
    	    		<xsl:if test="visible = 'TRUE'">
    					    <xsl:value-of select="$nodeName/name"/>
    				</xsl:if>
    			</xsl:for-each>
    	</xsl:for-each>
    Voila, donc je sauvegarde le nœud du premier for-each dans une variable, j'en lance un second sur un autre chemin, j'effectue un petit test sur un noeud du for-each actuel, et si il est bon, je veux me servir de ma variable "noeud" et lui ajouter le noeud "name" du for-each en cours... mais ça ne marche pas!

    Pour une exemple de xml :

    xml/request/list/* (A savoir que selon ma page, ce ne sont pas les mêmes noms de balise, d'où l'utilité de l'étoile)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <request>
       <list>
         <elt>
           <id>9</id> 
           <name>R08006</name> 
           <dBegin>02/01/2008</dBegin> 
           <dEnd>02/01/2008</dEnd> 
           <intervalDay>0</intervalDay> 
           <ageBegin>18</ageBegin> 
           <ageEnd>67</ageEnd> 
         </elt>
    [...]

    /xml/filter/page/filterList/filter/fieldList/field
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <filterList>
    		<filter>
    			<fieldList>
    				<field>
    					<name></name>
    					<as></as>
    					<display></display>
    					<visible></visible>
    					<enabled></enabled>
    					<order></order>
    				</field>
    Quelqu'un saurait-il m'aider s'il vous plait ?

  2. #2
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Essayez plutôt quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select="*[name()=$nodeName]/name"

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Merci de votre aide, malheureusement cela ne fonctionne pas plus (c'est à dire pas du tout).

  4. #4
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="nodeName" select="." />
    ne doit pas faire ce que vous voulez car cela ne remplit pas la variable avec le nom de l'élément. Il faudrait faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="nodeName" select="name()"/>

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:for-each select="xml/request/list/*">
    	    	<xsl:variable name="nodeName" select="name()" />
    	    	<xsl:for-each select="/xml/filter/page/filterList/filter/fieldList/field">
    	    		<xsl:if test="visible = 'TRUE'">
    			       <xsl:value-of select="*[name()=$nodeName]/name"/>
    			</xsl:if>
    		</xsl:for-each>
    	</xsl:for-each>
    Ceci ne fonctionne toujours pas. La seule chose dont je suis certain c'est qu'il passe le bon nombre de fois dans les boucles.

    Mais je sens qu'on se rapproche, en effet je devais récupérer le contenu du nœud au lieu du nom de la balise, ce qui était faux.

  6. #6
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Sans valeurs pour la partie filter, je ne peux qu'imaginer qu'il vous faut ceci...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:for-each select="/xml/filter/page/filterList/filter/fieldList/field[visible='TRUE' and name=$name]">
      <xsl:value-of select="name"/>
    </xsl:for-each>

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    XSL ne semble pas aimer, il me rend feuille blanche!

    Un exemple de contenu de filter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <filter>
    - <page>
    -     <filterList>
    -         <filter>
    -             <fieldList>
    -                 <field>
                          <name>ap_request.id</name> 
                          <as>ap_request.id</as> 
                          <display>ap_request.id</display> 
                          <visible>TRUE</visible> 
                          <enabled>TRUE</enabled> 
                          <order>1</order> 
                      </field>
    -                 <field>
                          <name>name</name> 
                          <as>name</as> 
                          <display>name</display> 
                          <visible>TRUE</visible> 
                          <enabled>TRUE</enabled> 
                          <order>2</order> 
                      </field>
    -                 <field>
                          <name>DATE_FORMAT(dateBegin, "%d/%m/%Y")</name> 
                          <as>dBegin</as> 
                          <display>dBegin</display> 
                          <visible>TRUE</visible> 
                          <enabled>TRUE</enabled> 
                          <order>3</order> 
                      </field>

    Au passage je viens donc de me rendre compte que je dois tester sur le As, et non sur le name. Enfin ce n'est cependant pas le problème.

    Pour essayer de clarifier ce que je cherche à faire, je construit un template qui récupère un xml contenant les résultats d'une requête SQL. J'ai à coté de ça un XML "filtre" qui me sert à créer mes conditions de la requête. Ce filtre prend entre autre en compte le fait qu'un champ puisse entre visible ou non. Je cherche donc à tester mon filtre, voir si le champ résultant de la requête doit être affiché ou pas, et ensuite à l'afficher.

    En sachant que je ne peux pas, pour X raison, ne pas inclure les champs "invisible" dans la requête SQL, et que je ne connais pas par avance le nom des champs.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 56
    Points : 28
    Points
    28
    Par défaut
    Deux jours de plus à pécher sur le problème, le net semble bien vide (nous dirons plutôt bien 'obscur') avec ce genre de possibilité, entre les sites de banalités sur le XSLT et ceux qui s'en vont dans la théorie, je m'égare :/

    Personne ne voit l'erreur?

    Merci d'avance

  9. #9
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    la méthode proposée par alain est pourtant la bonne, vérifie qu'il n'y a pas d'erreur dans le reste de ton code, comme l'absence de prise en compte d'éventuels espaces de nom par exemple.

    Il y a par ailleurs un défaut dans ton schéma XML : selon la spécification de XML du W3C, la chaîne "XML" (quelle que soit la casse) est réservée et ne devrait pas être utilisée comme nom d'élément ou d'attribut.

Discussions similaires

  1. [XSL] For each avec variables imbriquées
    Par Wells dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/05/2008, 19h28
  2. [XML/XSL]problème avec for-each
    Par mavina dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/06/2006, 15h28
  3. [XSL] utilisation du mode avec une variable
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/04/2006, 10h12
  4. [xsl] Problème avec for-each
    Par VolaiL dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 22/03/2006, 11h28
  5. [XSL] for-each et variable
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 12/01/2006, 11h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo