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 :

Problème avec les noeuds texte


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème avec les noeuds texte
    Bonjour à tous

    J'ai un petit souci avec les nœuds texte d'un élément XML.

    Voilà j'ai un élément XML qui renferme du texte et d'autres éléments comme ceci :

    <A> Bla bla 1 <B> .....</B> Bla bla 2 </A>



    En XSLT j'ai un template sur A dans lequel je voudrais récupérer la taille totale de tous les nœuds texte de A ( soit la longueur de ' Bla bla 1' + la longueur de 'Bla bla 2' ).

    J'ai essaye :

    string-length(normalize-space(text()))



    en pensant que

    text()

    contenait TOUS les nœuds texte.

    Surprise : le résultat ne contient que la longueur de ' Bla bla 1' autrement dit du PREMIER nœud texte.

    J'ai vérifié en faisant une boucle

    <xsl:for-each>

    qu'il y avait bien deux nœuds texte !

    Mais impossible d'additionner les deux longueurs dans la boucle for-each et surtout de sortir le résultat de la boucle !

    Si vous avez une idée , elle sera la bienvenue !

    Desiderius

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    En xslt 1.0 comme dites, comme ça par exemple.
    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
    <xsl:template match="A">
        <xsl:call-template name="totallength">
            <xsl:with-param name="length" select="0" />
            <xsl:with-param name="textnode" select="text()" />
        </xsl:call-template>
    </xsl:template>
    <xsl:template name="totallength">
        <xsl:param name="length" />
        <xsl:param name="textnode" />
        <xsl:if test="$textnode">
            <xsl:variable name="getlength">
                <xsl:value-of select="string-length(normalize-space($textnode))" />
            </xsl:variable>
            <xsl:call-template name="totallength">
                <xsl:with-param name="length" select="$length+$getlength" />
                <xsl:with-param name="textnode" select="$textnode/following-sibling::text()[1]" />
            </xsl:call-template>
        </xsl:if>
        <xsl:if test="not($textnode)">
            <xsl:value-of select="$length" />
        </xsl:if>
    </xsl:template>
    On dirait xslt 2.0..., je passe.

  3. #3
    Expert confirmé
    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
    Points : 4 847
    Points
    4 847
    Par défaut
    En te plaçant sur l'élément où tu veux concaténer tous les fils possédant du texte, tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string-length(normalize-space(.))

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par Loceka Voir le message
    En te plaçant sur l'élément où tu veux concaténer tous les fils possédant du texte, tu peux faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string-length(normalize-space(.))
    C'est effectivement prévu pour ça... Mais attention, ça contiendra aussi le texte de <B>.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Août 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Re: Pb noeuds texte
    Merci à tous pour vos réponses !

    La solution proposée par tsuji ( la récursion) était celle qu'il me fallait
    et fonctionne parfaitement !

    Desiderius

Discussions similaires

  1. [Arbre de decision] Problème avec les noeuds
    Par hollowdeadoss dans le forum R
    Réponses: 2
    Dernier message: 11/03/2013, 11h33
  2. Réponses: 1
    Dernier message: 19/11/2012, 19h18
  3. Problème avec les champs textes
    Par lechatleon dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 22/08/2009, 16h32
  4. problème avec les noeuds d'une JTree
    Par soujava dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 12/06/2008, 15h42
  5. []Problème avec les formulaires Outlook
    Par davidinfo dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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