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 :

[XSLT] petite question sur les variables


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Par défaut [XSLT] petite question sur les variables
    Bonjour,

    Voici mon code xsl :
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
     
    <xsl:template match = "/" >
    <xsl:call-template name="bissextile">
    <xsl:with-param name="annee" select="2000"/>
    </xsl:call-template>
    </xsl:template>
     
    <xsl:template name="bissextile">
    <xsl:param name="annee"/>
    <xsl:text> 2000 est une année bissextile et les suivante sont : </xsl:text>
    <xsl:value-of select="$annee+4"/>
    </xsl:template>
     
    </xsl:stylesheet>
    Je veux obtenir les années bissextiles depuis 2000 jusque 2100 en passant que par le langage xsl.
    Est ce que je peux?? car je sais qu'on ne peut pas modifier les variables en xsl .
    Ou suis-je obligé de passer par du php pour arriver à mon résultat??
    Car j'ai bien essayé de réussir, mais une fois que j'obtiens la première année après 2000 qui est bissextile, je suis bloqué!
    Car je ne vois que la solution où il faudrait modifier la variable mais c'est pas possible.
    Pouvez-vous m'aider??
    Merci

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    template récursif avec comme condition d'arrêt le paramètre >2099

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Par défaut
    Merci je n'avais pas encore vu ça en cours.
    J'ai essayé de me débrouiller mais ma xsl ne m'affiche pas mes années bissextiles pourtant mon navigateur ne m'indique pas d'erreur. Et je ne trouve pas mon erreur. Pouvez-vous m'indiquer la où est le probleme, svp??
    Ou m'aider.
    Merci

    Voici le code xsl :
    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
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
     
    <xsl:template name="bissextile">
    <xsl:param name="annee" select="2000"/>
    <xsl:text> 2000 est une année bissextile et les suivante sont : </xsl:text>
    <xsl:choose>
    <xsl:when test="$annee!=2100">
    <xsl:choose>
    <xsl:when test="$annee mod 400=0 and $annee mod 100!=0 ">
    <xsl:value-of select="$annee"/>
    <xsl:call-template name="bissextile">
    <xsl:with-param name="annee" select="$annee+4"/>
    </xsl:call-template>
    </xsl:when>
    <xsl:when test="$annee mod 4=0 and $annee mod 100!=0">
    <xsl:value-of select="$annee"/>
    <xsl:call-template name="bissextile">
    <xsl:with-param name="annee" select="$annee+4"/>
    </xsl:call-template>
    </xsl:when>
    <xsl:otherwise>
    <xsl:call-template name="bissextile">
    <xsl:with-param name="annee" select="$annee+4"/>
    </xsl:call-template>
    </xsl:otherwise>
    </xsl:choose>
    </xsl:when>
    </xsl:choose>
     
    </xsl:template>
     
    </xsl:stylesheet>

  4. #4
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    tu ne semble pas l'appeler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="/">
    	<xsl:text> 2000 est une année bissextile et les suivante sont : </xsl:text>
    	<xsl:call-template name="bissextile">
    		<xsl:with-param name="annee" select="2000"/>
    	</xsl:call-template>
    </xsl:template>
    Autre chose, ton algo est faux.

    il y a déjà ton mod 100 que je ne comprends pas, mais si ton template veux avoir du sens dans le otherwise ce n'est pas +4 mais +1 (pour gérer le cas ou on passerai une année non bissextile en paramètre)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Par défaut
    Voici le code avec les corrections apportées :

    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
    40
    41
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <xsl:stylesheet xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" version = "1.0" >
     
    <xsl:template match="/">
     <xsl:call-template name="bissextile">
       <xsl:with-param name="annee" select="2000"/>
     </xsl:call-template>
    </xsl:template>
     
     
     
     
    <xsl:template name="bissextile">
    <xsl:text> 2000 est une année bissextile et les suivante sont : </xsl:text>
      <xsl:choose>
         <xsl:when test="$annee!=2100">
            <xsl:choose>
               <xsl:when test="$annee mod 400=0">
                 <xsl:value-of select="$annee"/>
                 <xsl:call-template name="bissextile">
                 <xsl:with-param name="annee" select="$annee+1"/>
                 </xsl:call-template>
               </xsl:when>
               <xsl:when test="$annee mod 4=0">
                 <xsl:value-of select="$annee"/>
                 <xsl:call-template name="bissextile">
                 <xsl:with-param name="annee" select="$annee+1"/>
                 </xsl:call-template>
               </xsl:when>
               <xsl:otherwise>
                 <xsl:call-template name="bissextile">
                 <xsl:with-param name="annee" select="$annee+1"/>
                 </xsl:call-template>
               </xsl:otherwise>
            </xsl:choose>
         </xsl:when>
      </xsl:choose>
    </xsl:template>
     
    </xsl:stylesheet>
    Le mod 100 était juste une contrainte supplémentaire pour voir si l'année était bissextile. Mais il est facultatif en fait.
    Une fois que j'ai apporté les corrections, mon navigateur me dit: "Impossible de résoudre une référence à une variable ou un paramètre « annee »".
    Est ce que l'appel de la fonction bissextile dans les choose et le otherwise ne serait pas en conflit avec le call-template du début, d'où une erreur de traitement??
    Pouvez-vous m'éclairer??
    Merci

  6. #6
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    algo et template corrigé
    Quand tu as une année bissextile via ton deuxième when, rajoute 4 au lieu de 1 tu gagnera 3 appel ce n'est pas rien.
    le mod 400, puisque 400 est modulo 4
    la phrase doit être retiré autrement tu l'affiche pour chaque année

    pour ce qui est du code tu avais oublié le param dans le template
    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
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    	<xsl:template match="/">
    		<xsl:text> 2000 est une année bissextile et les suivante sont : </xsl:text>
    		<xsl:call-template name="bissextile">
    			<xsl:with-param name="annee" select="2000"/>
    		</xsl:call-template>
    	</xsl:template>
    	<xsl:template name="bissextile">
    		<xsl:param name="annee"/>
    		<xsl:choose>
    			<xsl:when test="$annee!=2100">
    				<xsl:choose>
    					<xsl:when test="$annee mod 400=0">
    						<xsl:value-of select="$annee"/>
    						<xsl:call-template name="bissextile">
    							<xsl:with-param name="annee" select="$annee+4"/>
    						</xsl:call-template>
    					</xsl:when>
    					<xsl:when test="$annee mod 4=0">
    						<xsl:value-of select="$annee"/>
    						<xsl:call-template name="bissextile">
    							<xsl:with-param name="annee" select="$annee+4"/>
    						</xsl:call-template>
    					</xsl:when>
    					<xsl:otherwise>
    						<xsl:call-template name="bissextile">
    							<xsl:with-param name="annee" select="$annee+1"/>
    						</xsl:call-template>
    					</xsl:otherwise>
    				</xsl:choose>
    			</xsl:when>
    		</xsl:choose>
    	</xsl:template>
    </xsl:stylesheet>

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 81
    Par défaut
    Merci bien pour ton aide.
    tu m'as aidé à comprendre pas mal de chose sur les templates récursif.

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

Discussions similaires

  1. petite question sur les variables
    Par discogarden dans le forum ASP.NET
    Réponses: 2
    Dernier message: 02/06/2008, 14h48
  2. Réponses: 2
    Dernier message: 07/05/2007, 16h46
  3. Réponses: 3
    Dernier message: 08/12/2004, 13h58
  4. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59

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