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 :

Boucle infinie xsl


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Par défaut Boucle infinie xsl
    Bonjour ami(e)s développeurs,
    Je souhaite chercher une sous-chaine dans une chaine (Je voudrais chercher les retours chariot et les remplacer par des </br>.
    J'ai cherché sur le net et j'ai trouvé une façon pour faire mais ça fait planter mon programme.
    Voilà comment j'ai procédé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <!-- récuperer la chaine et appeler la méthode de traitement-->       
           <xsl:for-each select="./attribut[@nom='compteRendu']" >
                 <xsl:call-template name="convertCrToBr">                
                     <xsl:with-param name="texte">
                            <xsl:value-of select="./compteRendu"/>
                     </xsl:with-param>  
                  </xsl:call-template>     
           </xsl:for-each>
    Pour l'instant, je tente de remplacer la chaine 'ligne' par la chaine 'modification'
    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
     
    <xsl:template name="convertCrToBr">
            <xsl:param name="texte"/>
     
            <xsl:variable name="strARemplacer">
            <xsl:value-of select="ligne" />
            </xsl:variable>
     
            <xsl:variable name="strRemplacerPar">
            <xsl:value-of select="modification" />
            </xsl:variable>
     
            <xsl:choose>
                <xsl:when test="contains($texte,$strARemplacer)">
                    <xsl:value-of select="substring-before($texte,$strARemplacer)"/>
                    <xsl:value-of select="$strRemplacerPar"/>
                    <xsl:call-template name="convertCrToBr">
                        <xsl:with-param name="texte" select="substring-after($texte,$strARemplacer)"/>            
                    </xsl:call-template>
                </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="$texte"/>
            </xsl:otherwise>
          </xsl:choose>
        </xsl:template>
    Le soucis c'est que j'ai une exception de ce genre : Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError


    J'ai l'impression que j'ai une boucle infinie mais je ne trouve pas.
    Je vous remercie pour votre aide.

  2. #2
    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
    Dude.
    Comme l'a sûrement indiqué le gars qui t'a filé ce code, il faut remplacer "ligne" et "modification" par ce qui compte comme une fin de ligne, et ce que tu veux mettre à la place.

    Dans le cas présent, vu que tu veux mettre un <br/>, il ne faudra pas utiliser value-of. Il faut le mettre tel que dans la variable strRemplacerPar, et utiliser <xsl:copy-of> au lieu de <xsl:value-of> pour l'écrire sur la séparation.

    Enfin bon, il faudrait essayer de comprendre comment ça marche, en fait.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Par défaut
    Bonjour,
    A vrai dire je ne comprends pas grand chose malgré toute ma volonté. J'ai tenté cette expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:value-of select="translate($lettre, '
    ', '&lt;br/&gt;')"/>
    mais j'ai des '<' à la place de mes retours chariots.
    Avez-vous une idée, je galère depuis hier.
    Merci bcp.

  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
    Translate ne peut pas t'aider. Ça ne peut que remplacer un caractère par un autre, et toi tu veux remplacer un caractère par une balise. Rien à voir.

    Citation Envoyé par allouchi Voir le message
    A vrai dire je ne comprends pas grand chose malgré toute ma volonté.
    Le code que tu as montré au début est proche de la solution. Il faut juste l'adapter à ton cas.
    Le plus simple, c'est d'étudier comment ça marche, petit bout par petit bout.

    Ça, là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="strARemplacer">
      <xsl:value-of select="ligne" />
    </xsl:variable>
    Est-ce que tu comprends ce que ça fait ?
    Si oui, on passe à la suite.
    Si non, il faut que tu étudies tes tutoriels, à propos de <xsl:variable>, de <xsl:value-of> et de XPath dans le cas où on lui passe un truc genre "ligne".
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Par défaut
    Merci pour ta réponse,
    Pour moi le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <xsl:variable name="strARemplacer">
      <xsl:value-of select="ligne" />
    </xsl:variable>
    Veut dire initialiser la variable (en d'autres langages ) String strARemplacer = "ligne";

    Est-ce bien ça?
    Merci.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 152
    Par défaut
    En gros je dois faire comme ça :
    Méthode :
    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
     
    <xsl:template name="convertCrToBr">
            <xsl:param name="texte"/>        
            <xsl:variable name="strARemplacer">
                <xsl:copy-of select="ligne" />
            </xsl:variable>
     
            <xsl:variable name="strRemplacerPar">
                <xsl:copy-of select="modification" />
            </xsl:variable>
     
            <xsl:choose>
                <xsl:when test="contains($texte,$strARemplacer)">
                    <xsl:value-of select="substring-before($texte,$strARemplacer)"/>
                    <xsl:value-of select="$strRemplacerPar"/>
                    <xsl:call-template name="convertCrToBr">
                        <xsl:with-param name="texte" select="substring-after($texte,$strARemplacer)"/>            
                    </xsl:call-template>
                </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="$texte"/>
            </xsl:otherwise>
          </xsl:choose>
    </xsl:template>
    et l'appel comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
     <xsl:variable name="chaineModif">
    	<xsl:call-template name="convertCrToBr">
    		<xsl:with-param name="lettre">					
                        <xsl:for-each select="./attribut[@nom='compteRendu']" >  
                            <xsl:value-of select="./compteRendu"/>
                        </xsl:for-each>         
    		</xsl:with-param>                           
    	</xsl:call-template>            
    </xsl:variable>    
     <!-- pour l'affichage des résultats -->        
    <xsl:value-of select="$chaineModif"/>
    Merci pour ton aide.

  7. #7
    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 allouchi Voir le message
    Veut dire initialiser la variable (en d'autres langages ) String strARemplacer = "ligne";

    Est-ce bien ça?
    Pas vraiment. <xsl:value-of> fonctionne partout pareil, que ce soit dans une variable ou ailleurs.

    Or ça fait quoi, <xsl:value-of select="ligne"/> ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. [XSL] Boucle infinie dû à une utilisation de "contains"
    Par nicolas.pied dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 25/09/2009, 10h01
  2. symptome de la boucle infinie dans une requete
    Par ouam81 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 27/05/2005, 12h10
  3. Réponses: 15
    Dernier message: 24/05/2005, 08h34
  4. [Socket] Pb de boucle infinie
    Par Myogtha dans le forum Entrée/Sortie
    Réponses: 12
    Dernier message: 10/06/2004, 14h10
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 00h04

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