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] Comment préciser la localisation via la fonction count() ?


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Par défaut [XSLT] Comment préciser la localisation via la fonction count() ?
    Bonjour,
    Voici la suite de mes aventures !
    J'ai le code XML ci-dessous :
    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <enregistrements>
    	<audios>
    		<enseignements>
    			<auteur nom="Dess">
    				<album titre="Un sens à  sa vie !">
    					<largeur>462</largeur>
    					<regroupement sous_titre="Etes-vous heureux ?">
    						<ligne>Certainement !</ligne>
    						<ligne>Assurément !
    							<plus>texte1</plus>
    						</ligne>
    						<ligne>Ca c'est sûr !</ligne>
    					</regroupement>
    				</album>
    			</auteur>
    			<auteur nom="Joe">
    				<album titre="Vive la vie !">
    					<largeur>500</largeur>
    					<regroupement sous_titre="One">
    						<ligne>A
    							<plus>texte2</plus>
    						</ligne>
    						<ligne>B
    							<plus>texte3</plus>
    						</ligne>
    						<ligne>C</ligne>
    					</regroupement>
    				</album>
    			</auteur>
    		</enseignements>
    	</audios>
    </enregistrements>
    et le code XSL suivant, utilisé pour afficher le numéro d'apparition des balises <plus> du 2ème album (Enfin, c'est ce que j'aimerais) :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" 
    encoding="utf-8" 
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
     
    <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Audio</title>
     
    </head>
    <body bgcolor="#FFFFFF">
    <xsl:apply-templates select="enregistrements/audios/enseignements/auteur[2]/album[1]/regroupement" />
    </body>
    </html>
    </xsl:template>
     
    <xsl:template match="regroupement">
        <xsl:apply-templates select="ligne"/> 
    </xsl:template>
     
    <xsl:template match="ligne">		
    	<xsl:if test="plus">
     
    			<xsl:value-of select="count(preceding::plus)+1"/>
    			<br />
     
    	</xsl:if>
    </xsl:template>
     
    </xsl:stylesheet>
    Et voilà ce qui s'affiche à l'écran, en conséquence :
    -> Or, j'aurais bien aimé qu'il m'affiche :
    C'est à dire, qu'il me donne la chronologie d'apparition des balises <plus> concernant uniquement le 2ème album ("Vive la vie !"), et nom l'ordre d'apparition dans la totalité des albums Comment puis-je faire, SVP ?

    Par avance Merci pour toute suggestion que vous pourriez me faire !

    PS: J'ai pensé utiliser à la place la fonction "preceding-sibling" mais, à vrai dire, je n'ai pas trouvé comment faire, là non plus !

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Hum, je dirais :Comme ça, ça cherche le nombre de fils "plus" à partir du noeud parent de la ligne courante. Le // c'est pour dire que c'est pas forcément un fils direct de regroupement.
    Tu pourrais aussi mettre :
    Pour ne compter que les "petits fils" du noeud parent de la ligne courante.

    EDIT: A non c'est pas ça en fait :p. Je vais y réflechir sous ma douche

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    T'étais sur la bonne voie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(preceding-sibling::ligne/plus)+1
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(preceding-sibling::ligne[plus])+1

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 186
    Par défaut
    Alors effectivement, ça y en a être beaucoup plus sympa, vu que, avec ton nouveau code, il prend bien les données comme il faut, selon l'exemple de code que j'ai proposé !
    Après, un petit 'hic !" quand même, car en fait, j'ai simplifié mon code au max pour que ce qui m'arrive soit plus compréhensible et... en essayant de rajouter un bloc de balises <regroupement> (selon le code suivant), ben, là, ça passe plus... Ouinnn !
    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
    <?xml version="1.0" encoding="UTF-8"?>
     
    <enregistrements>
    	<audios>
    		<enseignements>
    			<auteur nom="Dess">
    				<album titre="Un sens à  sa vie !">
    					<largeur>462</largeur>
    					<regroupement sous_titre="Etes-vous heureux ?">
    						<ligne>Certainement !</ligne>
    						<ligne>Assurément !
    							<plus>texte1</plus>
    						</ligne>
    						<ligne>Ca c'est sûr !</ligne>
    					</regroupement>
    				</album>
    			</auteur>
    			<auteur nom="Joe">
    				<album titre="Vive la vie !">
    					<largeur>500</largeur>
    					<regroupement sous_titre="One">
    						<ligne>A
    							<plus>texte2</plus>
    						</ligne>
    						<ligne>B
    							<plus>texte3</plus>
    						</ligne>
    						<ligne>C</ligne>
    					</regroupement>
    					<regroupement sous_titre="One">
    						<ligne>C
    							<plus>texte4</plus>
    						</ligne>
    						<ligne>D
    							<plus>texte5</plus>
    						</ligne>
    						<ligne>E</ligne>
    					</regroupement>
    				</album>
    			</auteur>
    		</enseignements>
    	</audios>
    </enregistrements>
    Voilà ce qu'il m'affiche :
    Au lieu de
    Bon, allez, on va bien y arriver quand même, non ?
    Ceci dit, n'hésite pas à nouveau à me proposer quelque amélioration, si ça pouvait me permettre d'arranger cela... En attendant, je te souhaite une Bonne nuit !

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Ah oui, mais là ça complique un peu.
    Avant tu te plaçais au niveau des "lignes" d'un même "regroupement" pour compter les "plus" qui étaient des fils directs. (cad que le calcul se faisait dans le template de "ligne")

    Maintenant, il faudrait faire ce calcul au niveau des noeuds "regroupement", voir leur père.
    Je vais tester quelques trucs.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Tu peux faire ça pour ajouter les "cousins" aux "fères" :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" 
    encoding="utf-8" 
    doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" 
    doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>
     
    <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>Audio</title>
     
    </head>
    <body bgcolor="#FFFFFF">
    <xsl:apply-templates select="enregistrements/audios/enseignements/auteur[2]/album[1]/regroupement" />
    </body>
    </html>
    </xsl:template>
     
    <xsl:template match="regroupement">
        <xsl:apply-templates select="ligne"> 
    		<xsl:with-param name="plusCount" select="count(preceding-sibling::*/*/plus)"/>
    	</xsl:apply-templates>
    </xsl:template>
     
    <xsl:template match="ligne">	
    	<xsl:param name="plusCount"/>
    	<xsl:if test="plus">
    			<xsl:value-of select="$plusCount+count(preceding-sibling::*/plus)+1"/>
    			<br />
    	</xsl:if>
    </xsl:template>
     
    </xsl:stylesheet>

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/08/2012, 20h29
  2. [XSLT] Parsage XML via XSLT, comment être valide W3C ?
    Par souffle56 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 29/05/2010, 20h19
  3. Réponses: 1
    Dernier message: 12/01/2009, 16h45
  4. namespace dans feuille xslt : comment ca marche exactement ?
    Par guipom dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 11/11/2004, 16h21
  5. Comment préciser nom de la colonne pour un Bulk Insert
    Par jeff37 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/06/2004, 17h05

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