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]affichage liste de 2 couleurs


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 61
    Points : 43
    Points
    43
    Par défaut [xsl]affichage liste de 2 couleurs
    Bonjour à tous,

    j'ai des données dans un fichier xml que j'affiche en html grace à une feuille xsl.

    Mes données se sont des biens immobiliers.

    Je les affiches les uns à la suite des autres en les séparant grâce à un trait horizontal.

    Je voudrais qu'un bien sur 2 est une autre couleur de font (comme ça se fait pour les petites annonces). C'est possible?
    Si oui, comment ?

    J'espère avoir été claire, sinon, n'hesitez pas a demander des precisions

    Merci d'avance pour vos réponses
    L'erreur est humaine mais une véritable catastrophe nécessite l'emploi d'un ordinateur

  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 : 47
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    -soit tu test la position si elle est impair position() mod 2=1 une couleur
    -soit tu passes des parametres par un call template et c'est lui que tu testes

  3. #3
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    ok je vais aller essayer
    L'erreur est humaine mais une véritable catastrophe nécessite l'emploi d'un ordinateur

  4. #4
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    j'ai besoin de quelques éclaircissements :
    position() dont tu parle c'et quelquechose de prédéfini ou c'est une fonction à créer ?
    Le seul position que j'ai trouvé ne peut prendre que les valeurs
    static ou relative ou absolute ou fixed. On ne peut donc pas utiliser mod 2.
    L'erreur est humaine mais une véritable catastrophe nécessite l'emploi d'un ordinateur

  5. #5
    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 : 47
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Position() est une fonction xpath qui te renvoie la position de l'element courant dabns ton contexte ou qui permet de selectionner des elts style
    //N[position() mod 2=1] te renverras tout les elements n qui sont de position impair dans le document
    faudrait commencer a bosser les fondamentaux

  6. #6
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    excuse mes lacunes mais, je l'avoue xml, xsl, xpath me semblent assez flou donc je les utilise que vraiment quand j'y suis obligée
    L'erreur est humaine mais une véritable catastrophe nécessite l'emploi d'un ordinateur

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour

    j'avais la meme problématique sauf que j'ai vu que mon namespace (http://www.w3.org/TR/WD-xsl) ne connait pas la methode position()

    malheureusement je ne peux passer au namespace http://www.w3.org/1999/XSL/Transform

    Erwy explique qu'il existe une autre méthode qui est de passer en parametre pas un call template.

    Mais je n'ai rien vu de la sorte sur le net, quelqu'un aurait un exemple afin que je comprenne de quoi il est question ?

    merci

  8. #8
    Membre du Club
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    61
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Jipé
    Bonjour

    j'avais la meme problématique sauf que j'ai vu que mon namespace (http://www.w3.org/TR/WD-xsl) ne connait pas la methode position()

    malheureusement je ne peux passer au namespace http://www.w3.org/1999/XSL/Transform
    Je vais avoir le meme problème que toi
    L'erreur est humaine mais une véritable catastrophe nécessite l'emploi d'un ordinateur

  9. #9
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    et comme je viens de lire que sur ce forum, préconisant l'autre namespace ils refusent de répondre aux questions du http://www.w3.org/TR/WD-xsl a mon avis je vais pas trouver plus de réponse

  10. #10
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    j'avais la meme problématique sauf que j'ai vu que mon namespace (http://www.w3.org/TR/WD-xsl) ne connait pas la methode position()
    Ah bon ?! C'est dommage parce que position() était la solution la plus simple. On peut y arriver avec un call-template, mais ca va pas être folichon...
    Soit le fichier XML suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <test>
      <bien>Bien 1</bien>
      <bien>Bien 2</bien>
      <bien>Bien 3</bien>
    </test>
    Voici le XSL qui va bien :
    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="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
     
    <xsl:output method="html"/>
     
    <xsl:template match="/">
      <html>
        <head>
    	  <title>TEST</title>
    	</head>
    	<body>
    	  <!-- On traite le premier bien -->
    	  <xsl:call-template name="affiche">
    	    <xsl:with-param name="monBien" select="test/bien[1]"/>
    	    <xsl:with-param name="couleur" select="'red'"/>
    	  </xsl:call-template>
    	</body>
      </html>
    </xsl:template>
     
    <xsl:template name="affiche">
      <xsl:param name="monBien"/>
      <xsl:param name="couleur"/>
      <p style="background-color: {$couleur}"><xsl:value-of select="$monBien"/></p>
      <!-- on teste s'il y a d'autres biens -->
      <xsl:if test="$monBien/following-sibling::bien">
        <xsl:call-template name="affiche">
             <!-- On traite le bien suivant -->
    	    <xsl:with-param name="monBien" select="$monBien/following-sibling::bien[1]"/>
    	    <!-- On change de couleur -->
    	    <xsl:with-param name="couleur">
    		    <xsl:choose>
    		      <xsl:when test="$couleur='red'">blue</xsl:when>
    		      <xsl:otherwise>red</xsl:otherwise>
    		    </xsl:choose>
          </xsl:with-param>
        </xsl:call-template>
      </xsl:if>
    </xsl:template>
     
    </xsl:stylesheet>
    Je ne suis pas sur que ca fonctionne avec le Working Draft XSL. Mais il ne serait pas temps de changer tes outils de travail, non ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  11. #11
    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 : 47
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par GrandFather
    <xsl:with-param name="monBien" select="test/bien[1]"/>
    mais la c'est juste un abrege de position non
    autrement tu aurais des algo un peu plus simple en passant la position en parametre et l'ensemble des noeuds a traiter et en testant si la position passe est pair ou impair

    un truc du style
    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
    42
    <xsl:call-template name="affiche"> 
           <xsl:with-param name="monBien" select="test/bien"/> 
           <xsl:with-param name="pos" select="'1'"/> 
         </xsl:call-template> 
     
    Code: 
    <?xml version="1.0" encoding="UTF-8"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format"> 
     
    <xsl:output method="html"/> 
     
    <xsl:template match="/"> 
      <html> 
        <head> 
         <title>TEST</title> 
       </head> 
       <body> 
         <!-- On traite le premier bien --> 
         <xsl:call-template name="affiche"> 
           <xsl:with-param name="monBien" select="test/bien"/> 
           <xsl:with-param name="couleur" select="'red'"/> 
         </xsl:call-template> 
       </body> 
      </html> 
    </xsl:template> 
     
    <xsl:template name="affiche"> 
      <xsl:param name="monBien"/> 
      <xsl:param name="pos"/> 
      la tu testes la parite de $pos
      <!-- on teste s'il y a d'autres biens --> 
      <xsl:if test="$monBien[$pos+1]"> 
        <xsl:call-template name="affiche"> 
             <!-- On traite le bien suivant --> 
           <xsl:with-param name="monBien" select="$monBien"/> 
     
           <xsl:with-param name="pos" select="$pos+1"> 
     
          </xsl:with-param> 
        </xsl:call-template> 
      </xsl:if> 
    </xsl:template>
    mais je doute
    autrement on peut peut etre faire qqch en virant les doublons(rappelle toi mon morceau de code sans generate_id) mais je suis memepas sur

  12. #12
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Salut Erwy
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    autrement tu aurais des algo un peu plus simple en passant la position en parametre et l'ensemble des noeuds a traiter et en testant si la position passe est pair ou impair
    Si j'ai bien saisi l'idée, ca devrait donner ca :
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
     
    <xsl:output method="html"/>
     
    <xsl:template match="/">
      <html>
        <head>
    	  <title>TEST</title>
    	</head>
    	<body>
    	  <xsl:call-template name="affiche">
    	    <xsl:with-param name="mesBiens" select="test/bien"/>
    	    <xsl:with-param name="position" select="1"/>
    	  </xsl:call-template>
    	</body>
      </html>
    </xsl:template>
     
    <xsl:template name="affiche">
      <xsl:param name="mesBiens"/>
      <xsl:param name="position"/>
      <p>
        <xsl:attribute name="style">
          <xsl:choose>
    	    <xsl:when test="$position mod 2 = 0">background-color: red</xsl:when>
    	    <xsl:otherwise>background-color: blue</xsl:otherwise>
          </xsl:choose>
        </xsl:attribute>
        <xsl:value-of select="$mesBiens[$position]"/>
      </p>
      <xsl:if test="$mesBiens[$position + 1]">
        <xsl:call-template name="affiche">
    	    <xsl:with-param name="mesBiens" select="$mesBiens"/>
             <xsl:with-param name="position" select="$position + 1"/>
        </xsl:call-template>
      </xsl:if>
    </xsl:template>
     
    </xsl:stylesheet>
    Effectivement, c'est un peu plus clean, pas d'utilisation des axes XPath. Mais bon, tout cela reste du bricolage...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  13. #13
    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 : 47
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Citation Envoyé par GrandFather
    Effectivement, c'est un peu plus clean, pas d'utilisation des axes XPath. Mais bon, tout cela reste du bricolage...
    tout a fait d'accord avec toi

  14. #14
    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 : 47
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    si les [1] et autres ne fonctionnent pas,il existe peut etre encore un moyen
    en eliminant les doublons car dans le cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xs:variable name="a" select="//d"/>
     
    <xs:variable name="premier">
      <xsl:value-of select="$a"/>
    </xs:variable>
    prendra la valeur du premier noeud d de $a(encore qu'avec votre namespace )
    d'ou possibilite d'elimination de valeur.
    Mais il serait temps de se mettre a jour

  15. #15
    Candidat au Club
    Inscrit en
    Juin 2004
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    chose que j'ai faite hiet finalement vu que je m'arrache les cheveux tout le temps, j'ai fini par prendre le temps de migrer mes xslt

    et une seule chose à dire : ouf !


Discussions similaires

  1. [XSL] affichage de liste dans une liste
    Par kikoo_paris dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/06/2007, 13h41
  2. [VB6] Bug d'affichage liste déroulante
    Par yttrium dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 30/05/2006, 08h45
  3. Zone de liste avec 2 couleurs differentes
    Par uloaccess dans le forum Access
    Réponses: 2
    Dernier message: 02/11/2005, 17h10
  4. [XSL]Affichage d'un contenu
    Par kirk80 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 08/07/2005, 16h00
  5. [xsl] affichage arbre simplifié
    Par squat dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 11/06/2003, 11h11

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