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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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 Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    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
    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 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 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    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>.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  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
    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 Invité 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