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] Creation d'un colspan dynamique


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut [XSLT] Creation d'un colspan dynamique
    Bonjour, je souhaite afficher un fichier XML que je filtre grace a JAva, VTL et XSL.

    Dans mon fichier XSL j'ai besoin de récuperer une veuleur permettant de déterminer le nombre que je vais devoir mettre dans le colspan.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		 <xsl:if test="Assignments/Assignment/Curve[@name='baseLine']!=''">
     
            		 <xsl:for-each select="Assignments/Assignment/Curve[@name='baseLine']/Segments/Segment">
              		  <td>
                 		  <xsl:value-of select="@start" />
              		  </td>
             		</xsl:for-each></xsl:if>
    La valeur de que je souhaite récupérer est la valeur max de segments dans cette boucle et la mettre dans un <td>. En disant je me rend compte que mon code n'est pas du tout optimisé

    Merci beaucoup d'avance

  2. #2
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    N'est-ce pas quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td colspan="{count(Assignments/Assignment/Curve[@name='baseLine']/Segments/Segment)}">...</td>

  3. #3
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    Non pas vraiment , en fait j'ai besoin de la taille max pour pouvoir ajuster le <td> du titre du tableau crée.
    Et puis il y a trois boucles de ce genre , et je dois tirer une seule valeur max des trois boucles .......... c'est pour ca que je suis un peu perdu

  4. #4
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    OK, ce serait plus facile d'avoir un exemple des données pour voir la complexité de la chose...
    En tout cas, il n'existe pas en standard de fonction max() en XSLT/XPath1.0 d'où l'obligation de faire des comparaisons une à une !

  5. #5
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    Merci pour ta réponse.

    Alors les données traitées sont des dates, je fais trois boucles identiques a celle que j'ai mis plus haut pour englobé tous les cas : s'il n'y a pas de donnée a l'endroit indiqué par la premiere go dans la seconde et ainsi de suite pour la troisieme

    J'aimerais pouvoir mettre en palce un compteur et ressort le max de boucles faites pour les trois cas ==> Il me faut qu'un seul max.


    Merci d'avance!!

  6. #6
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    XSLT est un langage déclaratif et non pas procédural. En conséquence, les variables ne sont pas variables et l'on ne peut donc pas incrémenter un compteur au fil des traitements.

    Ce que l'on peut faire, par contre, ce sont des comptages :
    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
    <xsl:variable name="a" select="count(.....)"/>
    <xsl:variable name="b" select="count(.....)"/>
    <xsl:variable name="c" select="count(.....)"/>
    <xsl:variable name="max">
     <xsl:choose>
      <xsl:when test="$a &gt;= $b and $a &gt;= $c">
       <xsl:value-of select="$a"/>
      </xsl:when>
      <xsl:when test="$b &gt;= $c">
       <xsl:value-of select="$b"/>
      </xsl:when>
      <xsl:otherwise>
       <xsl:value-of select="$c"/>
      </xsl:otherwise>
     </xsl:choose>
    </xsl:variable>

  7. #7
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    Derniere question , Comment je fais pour ensuite mettre la bonne valeur dans une colspan ?

    Et autre chose, est-possible de mettre ,les count dans le doc xsl apres les <choose> ....... . En fait comme le colspan qui a besoin de ce nombre max est le titre du tableau, il est placé avant le traitement du nombre max...... Ca commence à etre un peu tiré par les cheuveux je trouve .....

  8. #8
    Membre Expert Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Par défaut
    Pour écrire le colspan, il suffit dePar contre, les count() doivent être placés avant l'écriture du colspan.

    Il n'est pas rare qu'en XSLT, on ait le sentiment de faire plusieurs fois la même chose. C'est ça, un langage déclaratif, on fait comme si le programme qui va l'interpréter était assez intelligent pour optimiser tout seul, d'où les problèmes de performance que l'on constate parfois...

  9. #9
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    Merci beaucoup pour ton aide !!!!!!

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

Discussions similaires

  1. creation de page web dynamique
    Par noussaENSI dans le forum Autres langages pour le Web
    Réponses: 2
    Dernier message: 15/12/2005, 13h20
  2. [XSLT] creation de feuille xslt automatique
    Par jaxml dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 15/12/2005, 00h26
  3. creation d'une fonction dynamiquement...
    Par bibile dans le forum Général Python
    Réponses: 2
    Dernier message: 04/08/2005, 10h38
  4. [syntaxe]Creation table avec nom dynamique
    Par ZuZu dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 23/09/2004, 18h01
  5. Creation d'une vue dynamique ?
    Par Simeans2004 dans le forum Administration
    Réponses: 5
    Dernier message: 01/07/2004, 15h25

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