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 :

[XPath]soustraction de 2 attributs


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 30
    Par défaut [XPath]soustraction de 2 attributs
    Je souhaite faire la soustraction de deux nombes dont les valeurs sont dans des attributs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <mere>
    <fils attr="40" />
    <fils attr="50" />
    </mere>
    En XSLT, je souhaite avoir la soustraction entre 50-40.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:value-of select="mere/fils/@attr - mere/fils/@attr" />
    J'ai beau lire des tutoriels dans tous les sens, je ne vois pas comment faire pour accéder au noeud fils qui précéde le noeud courant tout en faisant une soustraction sur leur attribut "attr".
    J'ai bien regarder les preceding et autre mais ça n'a rien donné. Une piste ?

  2. #2
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Par défaut
    tu connais exactement le nombre de "fils" ou pas ?
    le nom de l'élément est toujours fils ?

    c'est un peu flou ce que tu veux faire
    et à partir du moment ou il y a + de 2 éléments et/ou qu'ils n'ont pas le même nom, ça se complique

    dans ton exemple, si tu as toujours 2 "fils" et que tu soustraits le premier au second
    quand tu es dans "mere" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="fils1"><xsl:value-of select="fils[1]/@attr"/></xsl:variable>
    <xsl:variable name="fils2"><xsl:value-of select="fils[2]/@attr"/></xsl:variable>
    <xsl:value-of select="$fils2 - $fils1"/>
    je ne suis pas sûr que ça marcherait (surtout si plusieurs éléments "mere" se suivent)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="mere/fils[2]/@attr - mere/fils[1]/@attr" />

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 30
    Par défaut
    tu connais exactement le nombre de "fils" ou pas ?
    Non, le nombre d'éléments fils est variable et inconnu, donc je ne peux pas utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select="fils[1]
    select="fils[2]
    (surtout si plusieurs éléments "mere" se suivent)
    Non, il n'ya qu'un seul élément mère.

  4. #4
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Par défaut
    il n'y qu'un seul résultat global ou à chaque élément fils il doit y avoir un résultat ?
    c'est pas clair pour moi

    chaque fils se soustrait à son suivant ?
    exemple :
    fils2 - fils1
    fils3 - fils2
    fils4 - fils3

    ou c'est le dernier auquel on soustrait tous les autres ?
    fils4 - fils3 - fils2 - fils1

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 30
    Par défaut
    C'est exactement ton premier exemple, sur la valeur des attributs pas facile !

  6. #6
    Membre éclairé
    Inscrit en
    Janvier 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 50
    Par défaut
    voilà, je pense que cecu doit marcher

    je travaille avec FOP 0.20.5
    le div 2 n'est peut etre pas nécessaire dans ton cas

    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
    <xsl:template match="mere">
    	<xsl:apply-templates/>
    </xsl:template>
     
    <xsl:template match="fils">
    	<xsl:variable name="val1"><xsl:value-of select="@attr"/></xsl:variable>
    	<xsl:variable name="ipos"><xsl:value-of select="position() div 2"/></xsl:variable>
    	<xsl:choose>
    		<xsl:when test="preceding-sibling::fils">
    			<xsl:variable name="val2"><xsl:value-of select="../fils[$ipos - 1]/@attr"/></xsl:variable>
    			<xsl:value-of select="$val1 - $val2"/>
    		</xsl:when>
    		<xsl:otherwise>
    			<!-- si c'est le premier fils je sais pas ce que tu fais -->
    		</xsl:otherwise>
    	</xsl:choose>
    </xsl:template>

Discussions similaires

  1. [XPATH] Test sur 2 attributs
    Par robbiano78 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 09/03/2009, 10h10
  2. [Xpath] match="*" si l'attribut d'un parent matche une certaine valeur
    Par Luc Hermitte dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/10/2008, 11h39
  3. [XPATH]Test d'une attribut à ""
    Par tatemilio2 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/11/2007, 09h17
  4. [XPath] Remplacement d'un attribut
    Par PrinceMaster77 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 28/03/2007, 10h25
  5. [XPath] Vérification d'un attribut d'un noeud
    Par Lima dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/03/2007, 09h54

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