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 :

[XSLT] Listes imbriquées et cumuls


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [XSLT] Listes imbriquées et cumuls
    Bonjour,

    J'ai un fichier xml ayant la structure suivante me donnant, pour chaque li une "longueur" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <ul>
    <li>10</li>
    <li>2</li>
    <li>3</li>
    <li><ul>
    <li>2</li>
    <li>3</li>
    <ol>
    <li>2</li>
    <li>3</li>
    </ol>
    <li>4</li>
    </ul>
    Je veux obtenir un fichier qui me donne, pour chaque ul/li, sa "position"" à savoir :
    1
    11
    13
    16
    1
    3
    21

    Mon problème est que si je code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:template match="ul/li" mode="content">
    <xsl:value-of select="sum(preceding-sibling::li + 1 " />
    alors ma liste est fausse après la liste imbriquée, j'ai 17 au lieu de 21.
    Et si je code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="sum(preceding::li + 1 " />
    alors j'ai
    1
    11
    13
    16
    17
    18
    25

    Je ne suis pas très familière avec les axes alors si vous pouviez me dépanner....

    Merci d'avance

  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 : 47
    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
    Ton exemple est difficilement comprehensible... tu as 8 li mais tu cites seulement 7 positions

    il serait plus simple que tu mettes dans le xml exemple la position souhaité en commentaire dans le noeud en question.

    On gagnerait en comprehension

  3. #3
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Je ne comprend pas très bien non plus mais pour repartir à zero, je proposerai de reconstruire ta liste de référence à chaque UL et de faire ensuite ton calcul. Ca ressemblerait à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <xsl:template match="/">
         <xsl:apply-templates select = "//ul"/>
    </xsl:template>
    <xsl:template match="ul">
         <xsl:for-each select="li">
              <xsl:value-of select="sum(preceding-sibling::li)+1"/>
         </xsl:for-each>
    </xsl:template>
    See you, space cowboy... and if you're satisfied, click on

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Désolée.... voici mon xml :

    <ul>
    <li> <p Class="aaa">POSTE1 </p>
    <p Class="bbb">10</p>
    </li>
    <li> <p Class="aaa">POSTE2</p>
    <p Class="bbb">2</p>
    </li>
    <li> <p Class="aaa">POSTE3</p>
    <p Class="bbb">3</p>
    </li>
    <li> <p Class="aaa">POSTE4</p>
    <ul>
    <li><p Class="aaa">POSTE4.1</p>
    <p Class="bbb">2</p>
    </li>
    <li><p Class="aaa">POSTE4.2</p>
    <p Class="bbb">3</p>
    </li>
    </ul>
    <ol>
    <li><p Class="bbb">2</p></li>
    <li><p Class="bbb">3</p></li>
    </ol>
    </li>
    <li> <p Class="aaa">POSTE5</p>
    <p Class="bbb">4</p>
    </li>
    </ul>


    J'aimerais avoir en sortie :
    POSTE1 - position 1 - longueur 10
    POSTE2 - position 11 -longueur 2
    POSTE3 - position 13 - longueur 3
    POSTE4 - position 16 - longueur 5
    POSTE 4.1 - position 16 - longueur 2
    POSTE 4.2 - position 18 - longueur 3
    POSTE 5 -position 21 -longueur 4

    Je ne veux donc pas que les infos contenus dans les ol/li soit prises en compte.
    Or si je code:
    <xsl:template match="ul/li">
    <xsl:value-of select="normalize-space(p[@Class='aaa'])" />
    <xsl:text> -position </xsl:text>
    <xsl:value-of select="sum(preceding-sibling::li/p[@Class='bbb']) /> <xsl:text> - longueur </xsl:text>
    <xsl:value-of select="normalize-space(p[@Class='bbb'])" />
    </xsl:template>

    J'obtiens :
    POSTE1 - position 1 - longueur 10
    POSTE2 - position 11 -longueur 2
    POSTE3 - position 13 - longueur 3
    POSTE4 - position 16 - longueur 5
    POSTE 4.1 - position 1 - longueur 2
    POSTE 4.2 - position 3 - longueur 3
    POSTE 5 -position 17 -longueur 4

    et l'axe preceding::li me donne
    POSTE1 - position 1 - longueur 10
    POSTE2 - position 11 -longueur 2
    POSTE3 - position 13 - longueur 3
    POSTE4 - position 16 - longueur 5
    POSTE 4.1 - position 16 - longueur 2
    POSTE 4.2 - position 18 - longueur 3
    POSTE 5 -position 26 -longueur 4
    Dans ce cas, les valeurs contenus dans mes ol/li sont prises en compte.

    J'espère avoir été plus claire....h

    Merci

  5. #5
    Membre éclairé Avatar de BizuR
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    688
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 688
    Points : 757
    Points
    757
    Par défaut
    Je ne comprend pas vraiment où est ton problème du coup puisque tu sembles récupérer les valeurs que tu veux non ?
    See you, space cowboy... and if you're satisfied, click on

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Listes et imbriquées et cumul
    He non, je ne récupère pas ce que je veux.
    Les valeurs récupérées ne sont pas bonnes pour le POSTE5 dans le cas du preceding-sibling::li car j'obtiens :
    POSTE4 - position 16 - longueur 5
    POSTE 4.1 - position 1 - longueur 2
    POSTE 4.2 - position 3 - longueur 3
    POSTE 5 -position 17 -longueur 4
    Pour POSTE5, la position 17 est erronée car les valeurs contenus dans ma liste ul/li imbriquée ne sont pas prises en compte. Je devrais euh, je voudrais obtenir position21.
    Dans le cas du preceding::li, les valeurs ne sont pas celles que je voudrais obtenir pour POSTE4.1 et POSTE4.2, et non plus pour POSTE5 :
    POSTE4 - position 16 - longueur 5
    POSTE 4.1 - position 16 - longueur 2
    POSTE 4.2 - position 18 - longueur 3
    POSTE 5 -position 26 -longueur 4
    Pour POSTE4.1, je voudrais en fait sa position dans sa propre liste, à savoir 1 et 3 pour POSTE4.2. Quant à POSTE5, j'obtiens la position 26 au lieu de 21 car du coup, non seulement les valeurs indiquées dans mes ul/li de ma liste imbriquée sont prises en compte mais aussi les valeurs indiquées dans mes ol/li....

    Bref, je tourne en rond....

  7. #7
    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 : 47
    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
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <xsl:template match="/">
    		<table>
    			<tbody>
    				<xsl:apply-templates select="//ul/li"/>
    			</tbody>
    		</table>
    	</xsl:template>
    	<xsl:template match="ul/li">
    		<xsl:variable name="pos" select="position()"/>
    		<tr>
    			<td>
    				<xsl:value-of select="p[@Class='aaa']"/>
    			</td>
    			<td>
    				position <xsl:value-of select="sum((//ul/li)[position()&lt;$pos]/p[@Class='bbb'])+1"/>
    			</td>
    			<td>
    				longueur <xsl:value-of select="sum(.//p[@Class='bbb' and ../parent::ul])"/>
    			</td>
    		</tr>
    	</xsl:template>

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Listes imbriquées et cumul
    Merci pour votra aide.

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

Discussions similaires

  1. [VBA-E]Listes Imbriquées : comment optimiser?
    Par hey_chuck dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/03/2006, 21h50
  2. [xslt]liste
    Par schnecke dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 02/11/2005, 11h08
  3. Présentation dans des listes imbriquées
    Par Ghusse dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 29/09/2005, 09h35
  4. [XHTML] Listes imbriquées valides ?
    Par Amon dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 23/09/2005, 23h05
  5. [CSS] listes imbriquées et conformité W3C
    Par rapathonyk dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 25/07/2005, 09h40

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