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 :

[XSL] Boucle infinie dû à une utilisation de "contains"


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre actif
    Avatar de nicolas.pied
    Profil pro
    Ingénieur d'Etudes
    Inscrit en
    Janvier 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur d'Etudes

    Informations forums :
    Inscription : Janvier 2005
    Messages : 249
    Points : 235
    Points
    235
    Par défaut [XSL] Boucle infinie dû à une utilisation de "contains"
    Bonjour,

    Savez-vous pourquoi le code XML suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="utf-8"?>
     
    <listitems>
      <data>
        <row link_Fr="http://www.google.fr" />
      </data>
    </listitems>
    Fonctionne avec le XSL suivant :

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <?xml version="1.0" encoding="utf-8"?>
     
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
      <xsl:output method="html"/>
     
      <xsl:template match="row">
        <div>
          <xsl:call-template name="RemoveEndLine">
            <xsl:with-param name="string" select="@ows_San_Link_Link_Fr" />
          </xsl:call-template>
        </div>
      </xsl:template>
     
      <xsl:template name="RemoveEndLine">
        <xsl:param name="string" />
        <xsl:choose>
          <!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
          <xsl:when test="contains($string, '&# 13;')" >
            <xsl:call-template name="RemoveEndLine">
              <!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
              <xsl:with-param name="string" select="substring-before($string, '&# 13;')" />
            </xsl:call-template>
          </xsl:when>
          <!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
          <xsl:when test="contains($string, '&# 10;')" >
            <xsl:call-template name="RemoveEndLine">
              <!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
              <xsl:with-param name="string" select="substring-before($string, '&# 10;')" />
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$string" />
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
     
    </xsl:stylesheet>
    Et pas avec le code de la fonction RemoveEndLine modifiée de cette façon :
    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
     
    <xsl:template name="RemoveEndLine">
        <xsl:param name="string" />
        <!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
        <xsl:variable name="vbCr">&# 13;</xsl:variable>
        <!-- Supprimer l'espace entre le # et le 1 sinon le forum l'interprête -->
        <xsl:variable name="vbLf">&# 10;</xsl:variable>
        <xsl:choose>
          <xsl:when test='contains($string, $vbCr)' >
            <xsl:call-template name="RemoveEndLine">
              <xsl:with-param name="string" select="substring-before($string, $vbCr)" />
            </xsl:call-template>-->
          </xsl:when>
          <xsl:when test='contains($string, $vbLf)' >
            <xsl:call-template name="RemoveEndLine">
              <xsl:with-param name="string" select="substring-before($string, $vbLf)" />
            </xsl:call-template>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="$string" />
          </xsl:otherwise>
        </xsl:choose>
      </xsl:template>
    J'utilise la parser Microsoft. Le second code a fonctionné dans le passé mais plus maintenant. Désormais, il part en boucle infinie. Cela vient-il de la version du parser utilisé qui aurait pu subir une mise à jour ?

    Merci pour votre réponse.

    Cordialement,

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Il manque les quotes dans tes définitions de variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	<xsl:variable name="vbCr">'
    '</xsl:variable>
    	<xsl:variable name="vbLf">'
    '</xsl:variable>

Discussions similaires

  1. Héritage boucle infinie dans une dll
    Par MABB dans le forum C++
    Réponses: 11
    Dernier message: 11/06/2009, 21h29
  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

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