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]Comment faire ceci ?? Mon for-each n'affiche pas tout !


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut [XSL]Comment faire ceci ?? Mon for-each n'affiche pas tout !
    Bonjour a tous et a toutes,

    voici mon problème,
    je possède un fichier xml que voici :
    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
     
    <functions>
    	<header>
    		<col name="FCT_ID"/>
    		<col name="MODULE_ID"/>
    		<col name="FUNCTION"/>
    		<col name="DISPLAY"/>
    		<col name="LINK"/>
    		<col name="MENU_ORDER"/>
    		<col name="MENU_GROUP"/>
    	</header>
    	<row>
    		<col>185</col>
    		<col>8</col>
    		<col>Lock</col>
    		<col>1</col>
    		<col>UOData.html</col>
    		<col>1</col>
    		<col>0</col>
    	</row>
    	<row>
    		<col>186</col>
    		<col>8</col>
    		<col>Change CECU Options</col>
    		<col>1</col>
    		<col>UOData.html</col>
    		<col>2</col>
    		<col>0</col>
    	</row>
    	<row>
    		<col>187</col>
    		<col>8</col>
    		<col>Edit User</col>
    		<col>0</col>
    		<col>UOData.html</col>
    		<col>3</col>
    		<col>User</col>
    	</row>
     
    .....
     
    </functions>
    qui contient des élément a afficher dans un <table>,
    ceux ci peuvent etre affiché ou pas selon la valeur de col[4], si = 0 on affiche pas, si = 1 on affiche.
    Ensuite si il col[4] n'est pas égale à 0, je teste si ceux si appartiènnent à un groupe de fonctions ou pas afin de les regroupé. Si col[7] = 0 pas de groupe, je les affiches donc seules, si col[7] = nomGroupe, alors je l'affiche avec son groupe.
    Pour les groupe tout va très bien le seul problème c'est lorsque j'ai plusieurs fonction dont col[7] = 0, il n'affiche que la 1ere et pas les autres, meme pas dans un groupe. Par contre pour les groupes je n'ai pas de problème !!

    Voici mon code, peut etre comprendrez vous pourquoi il affiche que la 1ère fonction dont le col[7] = 0 et pas les suivantes:
    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
     
        									<xsl:for-each select="//col[generate-id(.)=generate-id(key('id', .)[1])]">
    										<xsl:sort select="../col[6]" data-type="number" order="ascending"/> 
         										<xsl:sort select="../col[7]" data-type="text" order="ascending"/>
         										<xsl:variable name="groupe" select="."/>
         										<xsl:if test="//col[4] != 0">
         												<xsl:if test="$groupe = 0">
      													<table border="0" cellpadding="0" cellspacing="0" width="168">
    														<tr>
    	  														<td background="decoTd.gif" height="1" width="3"></td>
    														</tr>
    														<tr>
    	  														<td><A href="{../col[5]}" target="main"><xsl:value-of select="../col[3]"/></A></td>
    														</tr>		
    														<tr>
    	  														<td background="decoTd.gif" height="1" width="3"></td>
    														</tr>
    								        					</table>
    								        				</xsl:if>    
         												<xsl:if test="$groupe !=0">
      													<table border="0" cellpadding="0" cellspacing="0" width="168">
    														<tr>
    	  														<td background="decoTd.gif" height="1" width="3"></td>
    														</tr>
    														<tr>
    	  														<td class="group"><xsl:value-of select="."/></td>
    														</tr>		
    														<tr>
    	  														<td background="decoTd.gif" height="1" width="3"></td>
    														</tr>
    								        					</table>
    													<xsl:for-each select="//col[6]">
     														<xsl:sort select="../col[6]" data-type="number" order="ascending"/> 
         														<xsl:sort select="../col[7]" data-type="text" order="ascending"/>									 
                														<xsl:if test="../col[7] = $groupe"> 
                														     <xsl:if test="../col[4] != 0">
     																<table border="0" cellpadding="0" cellspacing="0" width="168">
    																	<tr>
    	  																	<td background="decoTd.gif" height="1" width="3"></td>
    																	</tr>
    																	<tr>
    	  																	<td><xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;&nbsp;&nbsp;]]></xsl:text><A href="{../col[5]}" target="main"><xsl:value-of select="../col[3]"/></A></td>
    																	</tr>
    																	<tr>
    	  																	<td background="decoTd.gif" height="1" width="3"></td>
    																	</tr>
    								        								</table>
                														    </xsl:if>
                													       </xsl:if> 
          												     </xsl:for-each>
    								        				</xsl:if>     										
          								           	</xsl:if>
        									</xsl:for-each>
    Voici ce qu'il m'affiche :
    Lock
    User
    List User
    Search User
    Profiles
    List Profiles
    Search profiles
    Et il devrai m'afficher ceci:
    Lock
    Change CECU Options
    User
    List User
    Search User
    Profiles
    List Profiles
    Search profiles
    Merci a vous pour votre aide, ciao

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="//col[4] != 0">
    erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="../col[4] != 0">
    et il y en a d'autre de ce style

  3. #3
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 147
    Points : 78
    Points
    78
    Par défaut
    D'apès toi je ne devais plus faire ceci
    mais bien ceci:
    ????

    Car si je le fait partout sa foire grave !!!

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    ensuite des appel de template me paraitrait bcp plus simple que tes test pour regroupé (entre autre ton systeme de tri de doublon est etrange et me semble tres mal placé)
    Quelque chose dans ce style me paraitrait plus judicieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    ...
    <xsl:apply-templates select="//row[col[4]=0]"/>
     
    <xsl:apply-templates select="//row[col[4]!=0 and col[7] = 0]"/>
     
    <xsl:apply-templates select="//row[col[4]!=0 and col[7]! = 0]">
    <xsl:sort select="../col[7]" data-type="text" order="ascending"/> 
    </xsl:apply-templates>
     
    ...

  5. #5
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par Devil666
    D'apès toi je ne devais plus faire ceci
    mais bien ceci:
    ????

    Car si je le fait partout sa foire grave !!!
    Non c'est l'inverse

    Dans tes test tu as mis // hors de ce fait tu verifies TOUJOURS la même cellule de ton xml, celle de la premiere colonne 6 dans la premiere row (d'apres ton xml)

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/07/2006, 13h10
  2. Calcul/Somme XML / XSL , comment faire ?
    Par Superpoisson dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 23/09/2005, 12h28
  3. [Noob][XML][XSL]Comment faire ceci ??
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 31/08/2005, 16h00
  4. [Noob][XSL] Comment faire ceci ??
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 22/07/2005, 16h38
  5. [XSL] Comment faire pour trier de cette façon ?
    Par shupa dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/06/2005, 17h39

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