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 :

Affichage text() précis dans Template définit [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 66
    Points
    66
    Par défaut Affichage text() précis dans Template définit
    Bonjour,

    Mon problème est le suivant:
    Tout d'abord le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <PARA>
        Texte 1
        <BALISE1/>
            Texte 2
        <BALISE2/>
        Texte 3
    </PARA>
    Je suis dans un PARA, mon traitement est que je veux afficher tout le texte excepté ce qui est entre la balise1 et la balise2. C'est a dire que je veux afficher : Texte 1 Texte 3
    Remarque : balise1 et balise2 servent de délimiteur pour montrer la différence entre 2 versions de mon document et donc porte bien un nom différent.

    Mon problème c'est que si je fais un apply-templates
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:apply-templates />
    j'ai tout qui s'affiche.

    Si je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="text()" />
    J'ai que Texte 1 qui s'affiche

    Si je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="text()">
    	<xsl:if test="not(following-sibling::*[1]= 'balise1') and not(preceding-sibling::*[1]= 'balise2')">
    			<xsl:value-of select="." />
    	</xsl:if>
    </xsl:for-each>
    J'ai tout qui s'affiche.

    Auriez vous une idée de ce que je pourrais faire s'il vous plait?

    Merci par avance de vos réponses

  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
    Comme ça. (J'ai ajouté une balise data pour voir plus claire.)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <xsl:for-each select="text()">
        <xsl:if test="
            not(name(following-sibling::*[1])='BALISE2') 
            and 
            not(name(preceding-sibling::*[1])='BALISE1')
        ">
            <data>
                <xsl:value-of select="normalize-space()" />
            </data>
        </xsl:if>
    </xsl:for-each>

  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 843
    Points
    4 843
    Par défaut
    Tu peux aussi faire ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="text()">
    	<xsl:if test="normalize-space(.) != '' and count(preceding-sibling::*[1]) + count(following-sibling::*[1]) != 2">
    		<xsl:value-of select="normalize-space(.)" /><br/>
    	</xsl:if>
    </xsl:for-each>

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 66
    Points
    66
    Par défaut
    Merci beaucoup de ta réponse tsuji, elle a résolu mon problème.
    Le problème que j'avais était bien dans mon test, je n'utilisais pas le name() et donc il ne faisait pas le test que je désirais.

    Loceka ton code ne passe chez moi surement un problème de syntaxe, mais merci quand même de ta réponse.

    En tout encore merci pour vos réponses claires et précises.

  5. #5
    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 843
    Points
    4 843
    Par défaut
    Oui, ça a validé avant que j'ai terminé de taper mon post.
    Il est mis à jour...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 66
    Points
    66
    Par défaut
    Merci de ta réponse, ton code passe bien maintenant mais il ne fait pas exactement ce que je veux à la différence du code de tsuji.

    En effet si j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <PARA>
        Texte 1
        <BALISE1/>
            Texte 2
        <BALISE2/>
        Texte 3
        <BALISE1/>
            Texte 4
        <BALISE2/>
        Texte 5
    </PARA>
    Il ne m'affiche que 1 et 3 au lieu de 1, 3 et 5.
    Mais merci quand même de ta réponse.

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 564
    Points : 21 629
    Points
    21 629
    Par défaut
    Personnellement, vu qu'on ne sait pas trop ce qui est plus souhaité qu'autre chose, je m'embêterais pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:for-each select="text()[not(preceding-sibling::*[1]/self::BALISE1)]">
     
     
    </xsl:for-each>
    Ne prendre que les nœuds texte qui n'ont pas une <BALISE1> juste devant eux.
    Après tout, on sait très bien que <BALISE2> est juste après, pourquoi vérifier ?

    Et si c'était pas ce qu'on veut, alors l'approche and non plus.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 116
    Points : 66
    Points
    66
    Par défaut
    Oui je suis tout à fait d'accord le fait de tester seulement la balise1 suffit.

    Merci de ta réponse

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

Discussions similaires

  1. Affichage texte formaté dans un QTreeWidget
    Par AF_2.8 dans le forum Débuter
    Réponses: 1
    Dernier message: 14/01/2014, 06h12
  2. [AC-2007] Mettre un texte précis dans le presse-papier ?
    Par tibofo dans le forum VBA Access
    Réponses: 1
    Dernier message: 10/01/2010, 16h23
  3. Affichage texte javasript dans la même fenêtre
    Par coco38 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 16/04/2007, 15h45
  4. Probleme d'affichage du curseur dans un chp texte avec firef
    Par dadovb dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/10/2005, 12h31
  5. [HTML] affichage d'un text brut dans un tableau
    Par fren2809 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 07/10/2005, 13h57

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