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 :

Valeur du noeud courant


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de emeraudes
    Inscrit en
    Avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 148
    Par défaut Valeur du noeud courant
    Bonjour tout le monde,

    J'ai un petit soucis XSL.

    Voici mon XML:
    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
     
    <property>
    	<prices2012>
    		<jan>2750</jan>
    		<feb>2750</feb>
    		<mar>3500</mar>
    		<apr>3995</apr>
    		<may>3995</may>
    		<jun>5750</jun>
    		<jul>8500</jul>
    		<aug>8500</aug>
    		<sep>5750</sep>
    		<oct>3995</oct>
    		<nov>2750</nov>
    		<dec>2750</dec>
    	</prices2012>
    </property>
    Je voudrais ce resultat.
    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
     
    <Rate>
    	<StartDate>2012-01-01</StartDate>
    	<EndDate>2012-01-31</EndDate>
    	<WeeklyRate>2750</WeeklyRate>
    	<Name>January</Name>
    </Rate>
    <Rate>
    	<StartDate>2012-02-01</StartDate>
    	<EndDate>2012-02-27</EndDate>
    	<WeeklyRate>2750</WeeklyRate>
    	<Name>February</Name>
    </Rate>
    <Rate>
    	<StartDate>2012-03-01</StartDate>
    	<EndDate>2012-03-30</EndDate>
    	<WeeklyRate>3500</WeeklyRate>
    	<Name>March</Name>
    </Rate>
    <Rate>
    	<StartDate>2012-04-01</StartDate>
    	<EndDate>2012-04-31</EndDate>
    	<WeeklyRate>3995</WeeklyRate>
    	<Name>April</Name>
    </Rate>
    etc... pour tous les mois
    J'ai cree ce XSL mais il ne prend que la valeur du premier mois pour tous, au lieux de changer. Pourtant il prend bien en compte le nom de la balise.
    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
     
    <xsl:template match='property'>
    	<xsl:for-each select='child::prices2012'>
    		<xsl:apply-templates select="node()">
    			<xsl:with-param name="month"><xsl:value-of select="*" /></xsl:with-param>
    		</xsl:apply-templates>
    	</xsl:for-each>
    </xsl:template>
     
    <xsl:template match='jan'>
    	<xsl:param name='month' />
    	<xsl:if test="$month != ''">
    	<Rate>
    		<StartDate>2012-01-01</StartDate>
    		<EndDate>2012-01-31</EndDate>
    		<WeeklyRate><xsl:value-of select='format-number($month,"0")' /></WeeklyRate>
    		<Name>January</Name>
    	</Rate>
    	</xsl:if>
    </xsl:template>
     
    <xsl:template match='fev'>
    	<xsl:param name='month' />
    	<xsl:if test="$month != ''">
    	<Rate>
    		<StartDate>2012-02-01</StartDate>
    		<EndDate>2012-02-27</EndDate>
    		<WeeklyRate><xsl:value-of select='format-number($month,"0")' /></WeeklyRate>
    		<Name>February</Name>
    	</Rate>
    	</xsl:if>
    </xsl:template>
    etc... pour tous les mois
    Pourquoi n'arrives-je pas a avoir la valeur du noeud courant correctement?
    J'ai essaye plein de choses mais rien ne marche: ".", "/", "current()","node()","selft","self::*" ...

    Que dois-je faire pour corriger ce probleme?

    Merci beaucoup.

  2. #2
    Membre confirmé Avatar de emeraudes
    Inscrit en
    Avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 148
    Par défaut
    J'ai trouve la solution finalement. Je l'a poste au cas ou ca pourrait aider d'autre personne.

    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
     
    <xsl:template match='property'>
    	<xsl:for-each select='child::prices2012'>
    		<xsl:apply-templates>
    			<xsl:with-param name="month"><xsl:value-of select="*" /></xsl:with-param>
    		</xsl:apply-templates>
    	</xsl:for-each>
    </xsl:template>
     
    <xsl:template match='jan'>
    	<xsl:param name='month' />
    	<xsl:if test="$month != ''">
    	<Rate>
    		<StartDate>2012-01-01</StartDate>
    		<EndDate>2012-01-31</EndDate>
    		<WeeklyRate><xsl:value-of select='format-number(current(),"0")' /></WeeklyRate>
    		<Name>January</Name>
    	</Rate>
    	</xsl:if>
    </xsl:template>

  3. #3
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    En fait ton <xsl:with-param name="month"><xsl:value-of select="*" /></xsl:with-param> va chercher tous les noeuds fils de prices2012, ce qui n'est pas ce que tu veux.

    le mieux étant d'écrire un apply-templates classique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:template match='property'>
    	<xsl:for-each select='child::prices2012'>
    		<xsl:apply-templates select="*"/>
    	</xsl:for-each>
    </xsl:template>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <xsl:template match='jan'>
    	<xsl:if test=".">
    	<Rate>
    		<StartDate>2012-01-01</StartDate>
    		<EndDate>2012-01-31</EndDate>
    		<WeeklyRate><xsl:value-of select='format-number(.,"0")' /></WeeklyRate>
    		<Name>January</Name>
    	</Rate>
    	</xsl:if>
    </xsl:template>

  4. #4
    Membre confirmé Avatar de emeraudes
    Inscrit en
    Avril 2004
    Messages
    148
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 148
    Par défaut
    Citation Envoyé par Loceka Voir le message
    En fait ton <xsl:with-param name="month"><xsl:value-of select="*" /></xsl:with-param> va chercher tous les noeuds fils de prices2012, ce qui n'est pas ce que tu veux.
    Merci pour ta reponse.
    Effectivement en corrigeant ce code ca fonctionne

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Euh, je serais curieux de trouver un exemple où un if pareil ne s'exécute pas :

    Je suppose que le but était de vérifier que son contenu n'était pas vide. Manières de le faire qui marchent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test=". != ''">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="string-length(.) > 0">
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Je suppose que le but était de vérifier que son contenu n'était pas vide. Manières de le faire qui marchent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test=". != ''">
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:if test="string-length(.) > 0">
    Euh oui

    J'étais pas réveillé hier...

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

Discussions similaires

  1. [SimpleXML] Obtenir la valeur du noeud courant
    Par ac/dc dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/07/2008, 13h51
  2. [XSLT] rechercher un noeud depuis le noeud courant
    Par camboui dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 21/12/2005, 18h47
  3. [XSL] savoir si le noeud courant est root
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/11/2005, 16h18
  4. comment connaitre si le noeud courant est le root?
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 19/09/2005, 14h45
  5. position() relative au noeud courant
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 09/09/2004, 17h38

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