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 pour PDF( xsl:for-each imbriqués)


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Points : 63
    Points
    63
    Par défaut XSL pour PDF( xsl:for-each imbriqués)
    Bonjour

    je suis débutant avec XSL, et je dois créer un fichier pdf.

    Je suis confronté a un pb sur la gestion d'une partie d'une boucle, ma deuxième boucle imbriquée ne génère pas correctement ce que je lui demande.

    pour plus de clarté je fournis le code

    mon xml généré

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <CW>
      <content>
        <tarifChiffe />
        <NumFichier />
        <DateFSe />
        <patient>
          <patientpreNom>XAVIER</patientpreNom>
          <patientImmat>1651926220097</patientImmat>
          <pateientCle>49</pateientCle>
          <patientNom>FAMILLEUN</patientNom>
          <patientAdresse1>CNDA)5 CHE DU MAS DE ROCHETá70 CASTELNAU LE LEZ</patientAdresse1>
          <patientAdresse2 />
          <patientAdresse3 />
          <organisme>013499881</organisme>
        </patient>
        <beneficiaire>
          <beneficiaireNom>FAMILLEUN</beneficiaireNom>
          <beneficiairepreNom>DESIRE</beneficiairepreNom>
          <beneficiaireImmat>1651926220097</beneficiaireImmat>
          <beneficiaireCle>49</beneficiaireCle>
          <beneficiaireNaiss>01/07/1998</beneficiaireNaiss>
        </beneficiaire>
        <Duplic>FSE N°</Duplic>
        <Acte>
          <Dateacte>10/04/2014</Dateacte>
          <code>C</code>
          <CodeCCAM>Néant</CodeCCAM>
          <tarifunitaire>23</tarifunitaire>
          <modificateurs />
          <phaseActi />
          <teeth>
            <dent />
          </teeth>
          <association>___</association>
        </Acte>
        <Acte>
          <Dateacte>11/04/2014</Dateacte>
          <code>SC</code>
          <CodeCCAM>Néant</CodeCCAM>
          <tarifunitaire>40.97</tarifunitaire>
          <modificateurs />
          <phaseActi />
          <teeth>
            <dent />
          </teeth>
          <association>___</association>
        </Acte>
        <Acte>
          <Dateacte>10/04/2014</Dateacte>
          <code>CCAM</code>
          <CodeCCAM>HBGD015</CodeCCAM>
          <tarifunitaire>156.75</tarifunitaire>
          <modificateurs />
          <phaseActi>10</phaseActi>
          <teeth>
            <dent>31</dent>
            <dent>32</dent>
            <dent>33</dent>
          </teeth>
          <association />
        </Acte>
      </content>
    </CW>
    et mon xsl

    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
    30
    31
    32
    33
    <div class="Actelgn">
    					<xsl:for-each select="CW/content/Acte">
    						<div class="pos">
    							<div class="date">
    								<xsl:value-of select="Dateacte" />
    							</div>
    							<xsl:if test="code!='CCAM'">
    								<div class="codeN">
    									<xsl:value-of select="code" />
    								</div>
    							</xsl:if>
    							<xsl:if test="CodeCCAM!='Néant'">
    								<div class="codeC">
    									<xsl:value-of select="CodeCCAM" />
    								</div>
    							</xsl:if>
    								<div class="PU">
    									<xsl:value-of select="tarifunitaire" />
    								</div>
    						</div>
    						<div class="pos2">
    								<div class="tooth">
    									<xsl:value-of select="teeth"/>
    								</div>
    								<xsl:for-each select="teeth">
    								<div class="tooth">
    									<xsl:value-of select="dent"/>
    								</div>
    								</xsl:for-each>
    						</div>
    					</xsl:for-each>
    					
    				</div>
    Il se trouve donc que l'output me sort pas l'effet désiré

    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
    <div class="Actelgn">
          <div class="pos">
            <div class="date">10/04/2014</div>
            <div class="codeN">C</div>
            <div class="PU">23</div>
          </div>
          <div class="pos2">
            <div class="tooth" />
            <div class="tooth" />
          </div>
          <div class="pos">
            <div class="date">11/04/2014</div>
            <div class="codeN">SC</div>
            <div class="PU">40.97</div>
          </div>
          <div class="pos2">
            <div class="tooth" />
            <div class="tooth" />
          </div>
          <div class="pos">
            <div class="date">10/04/2014</div>
            <div class="codeC">HBGD015</div>
            <div class="PU">156.75</div>
          </div>
          <div class="pos2">
            <div class="tooth">313233</div>
            <div class="tooth">31</div>
          </div>
        </div>
    je voudrais plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <div class="pos2">
    <div>31</div>
    <div>32</div>
    <div>33</div>
    </div>
    Qui pourrait me conseiller pour ce problème ?
    Merci d'avance

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Voici de quoi alimenter ta réflexion :

    - Combien y a-t-il d'éléments <teeth> ?
    - Y a-t-il un sens à faire une boucle sur un tel nombre d'éléments ?
    - Ne faudrait-il pas plutôt boucler sur des éléments dont il y a un autre nombre, un nombre adapté aux boucles ?
    - Quel est l'élément pour lequel tu veux faire N trucs si tu trouves N fois cet élément ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    merci de l'aide,

    il se trouve que j'ai

    Plusieurs actes, avec une liste "teeth" de "dents".

    Il faut que je puisse imprimer les infos de l'acte , avec la ligne de dents correspondantes en dessous.

    l'xml généré , correspond bien à la structure, par contre dans xsl, lorsque je fais ma boucle de recherche sur teeth dans l'Acte, il ne me sort qu'une seule dent.

    car une fois que les éléments sont mis en div , je peux les positionner à ma guise.

    j'ai mis en comparaison l’élément teeth complet, afin de vérifier qu'il était bien alimenté. Je m'y connais assez mal pour savoir ce qui bloque

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Euh, oui. En fait j'avais déjà compris tout ça.
    Mes questions ne sont pas là pour que tu fasses une dissertation de français, mais pour que tu comprennes ce que tu dois faire. Notamment, en commençant par y répondre.

    Prenons la première question : "Combien y a-t-il d'éléments <teeth> ?"
    Typiquement, quand une question commence par "combien", l'idée est de répondre avec un nombre. 28 ? 0 ? 782 ? 52 000 ? Combien ?
    Mais pas avec un rapport de mission déjà effectuée.

    Même chose avec les trois autres questions : l'idée est d'y répondre, quelque chose qui y correspond.

    Vas-y, recommence.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    bizarrement , j'avais cru que c'était clair depuis le début aussi. la référence de la structure du xml étant la base.

    bref, l'élément 'teeth' est une liste sur laquelle itérer afin de disposer des mes éléments 'dent' comme je l'entend.
    pour chaque élément Acte, il ne doit avoir qu'1 seul élément 'teeth'.

    l'élément 'teeth', lui peut comporter de 0 à 32 éléments.

    faire une boucle, me permet de différencier chaque élément de 'teeth', afin de le disposer sur des positions précises dans le pdf généré.

    Même en enlevant le foreach imbriqué, si j'attache les différents éléments 'dents' directement sur l'acte plutôt que sur la liste 'teeth'. Dans un acte donné, l'output ne se fait que sur la première 'dent' .

    Je ne vois pas pourquoi les éléments suivant 'dent' ne sont pas pris en compte.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Gaspard22 Voir le message
    bref, l'élément 'teeth' est une liste sur laquelle itérer afin de disposer des mes éléments 'dent' comme je l'entend.
    pour chaque élément Acte, il ne doit avoir qu'1 seul élément 'teeth'.
    Excellent. J'aurais aussi accepté : 1

    Citation Envoyé par Gaspard22 Voir le message
    l'élément 'teeth', lui peut comporter de 0 à 32 éléments.
    Merci pour cette précision. Notons toutefois, que si je ne t'ai pas posé la question, ce n'est pas parce que j'ai oublié de le faire. Ne nous dispersons pas.

    Citation Envoyé par Gaspard22 Voir le message
    faire une boucle, me permet de différencier chaque élément de 'teeth', afin de le disposer sur des positions précises dans le pdf généré.
    Je comprends. En faisant cette boucle, tu peux te concentrer séparément sur chacun des 1 éléments en question, c'est bien ça ?
    Regardons un peu comment ça va se passer. D'abord, première itération de la boucle, le premier élément <teeth>. Et ensuite, deuxième itération de la boucle, on s'intéresserait au deuxième élément <teeth>, mais il n'y en a pas, donc la boucle s'arrête ici.

    Citation Envoyé par Gaspard22 Voir le message
    Même en enlevant le foreach imbriqué, si j'attache les différents éléments 'dents' directement sur l'acte plutôt que sur la liste 'teeth'. Dans un acte donné, l'output ne se fait que sur la première 'dent' .

    Je ne vois pas pourquoi les éléments suivant 'dent' ne sont pas pris en compte.
    Intéressant. Il semblerait donc que ce qu'il y a à faire à propos du foreach imbriqué, n'est pas de l'enlever. Humm, mais alors quoi donc, quoi donc...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    D'abord, première itération de la boucle, le premier élément <teeth>. Et ensuite, deuxième itération de la boucle, on s'intéresserait au deuxième élément <teeth>, mais il n'y en a pas, donc la boucle s'arrête ici
    'teeth' est une liste d'éléments 'dents'.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <teeth>
            <dent>31</dent>
            <dent>32</dent>
            <dent>33</dent>
          </teeth>
    je fait une boucle dans 'teeth' pour dissocier mes éléments 'dents'(comme tu l'as fort justement compris ). Sauf que dans la transformation avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="teeth">
    	<div class="tooth">
    		<xsl:value-of select="dent"/>
    	</div>
    </xsl:for-each>
    je n'ai que la première dent qui apparaît. Or ma liste est bien remplie puisque si j'exécute avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <div class="tooth">
    <xsl:value-of select="teeth"/>
    </div>
    j'ai bien les 3 'dents' , sauf que les éléments ne sont pas dissociés

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Gaspard22 Voir le message
    je fait une boucle dans 'teeth' pour dissocier mes éléments 'dents'(comme tu l'as fort justement compris ).
    Où ça une boucle dans <teeth> ? Je ne la vois pas... Je vois une boucle sur les éléments <teeth>, qui va donc parcourir chacun des 1 éléments <teeth> présents. Exactement comme la boucle sur <Acte> va parcourir chacun des 3 éléments <Acte> présents.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    laisses tomber

    merci quand même

  10. #10
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Mon ami si tu refuses d'analyser les choses de manière logique, ton niveau d'informatique restera bien médiocre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2012
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2012
    Messages : 106
    Points : 63
    Points
    63
    Par défaut
    Merci de ton soutien et de tes encouragements, j'ai trouvé la solution un peu grâce à ton aide précieuse. Car un peu lassé de ton comportement pontifiant, j'ai pris le temps de m'extraire de mon pb pour y revenir plus tard.

    te souhaites une bonne journée

  12. #12
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Tu ne seras jamais autant lassé du ton pontifiant que tu m'as forcé à prendre, que je l'étais moi-même. Si tu as fini par comprendre qu'il fallait boucler sur <dent> et pas <teeth>, tu as aussi compris que je m'acharnais à te mettre le nez devant l'évidence. Je le fais mais m'en passerais bien.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT 1.0] For Each imbriqués
    Par uNreal dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 09/04/2011, 21h07
  2. [XSLT] for-each imbriqués
    Par bgrand dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 15/10/2009, 13h42
  3. [XSLT] for-each imbriqués
    Par abdoulax dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/10/2006, 12h08
  4. [XSLT]for-each imbriqués, et autres galères...
    Par Sarrus dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/03/2006, 17h57
  5. [XML/XSL] for-each imbriqués
    Par grome dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/11/2005, 12h44

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