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] Conditionner tri pour date


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Par défaut [XSLT] Conditionner tri pour date
    Bonjour,

    Le tri de mes données ne fonctionnent pas pour les dates, je comptais conditionner mon tri comme ci-dessous

    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
     
        ....
        ....
        <!-- Pour Chaque ligne -->
        <xsl:for-each select="*">
          <!-- tri -->
          <xsl:choose>
            <xsl:when test="contains(*[name()=$champTri],'/')">
              <xsl:sort select="concat(substring(*[name()=$champTri],7,4), substring(*[name()=$champTri],4,2), substring(*[name()=$champTri],1,2))" order="{$sensTri}"/>          
            </xsl:when>
            <xsl:otherwise>
              <xsl:sort select="*[name()=$champTri]" order="{$sensTri}"/>          
            </xsl:otherwise>
          </xsl:choose>
        ....
        ....
    Mais cela ne fonctionne pas, il me renvoit l'erreur ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xsl:sort n'est pas admis à cet endroit de la feuille de style !
    Je m'y prend certainement mal

    Merci d'avance.

  2. #2
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    en faite xsl:sort ne peut être qu'enfant de xsl:for-each pas de xsl:when ou de xsl:otherwise

    j'ai trouvé aussi ici une explication sur sort et les dates

  3. #3
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Par défaut
    Il faudrait donc que je conditionne mon for-each, mais bon ça me ferait dupliquer mon pavé contenu dans le for-each. Pas très propre

  4. #4
    Membre émérite
    Profil pro
    Responsable Dev
    Inscrit en
    Décembre 2003
    Messages
    788
    Détails du profil
    Informations personnelles :
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Dev

    Informations forums :
    Inscription : Décembre 2003
    Messages : 788
    Par défaut
    je suis d'accord
    as tu un exemple concret (xml de départ, xml à obtenir)
    merci

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2006
    Messages
    857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2006
    Messages : 857
    Par défaut
    J'ai simplifié mon XSL, mais voilà en gros comme je procéde...

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
    <?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" indent="yes"/>
     
      <!-- Parametres d entrees -->
      <xsl:param name="champTri"/>
      <xsl:param name="sensTri"/>
     
     
      <!-- Template aplati -->
      <xsl:template name="aplati">
       <!-- Pour tous les fils sans fils -->
       <xsl:for-each select="*[count(*)=0]">
        <xsl:if test="name()!='ID'">
          <td>
           <xsl:value-of select="."/>
          </td>
        </xsl:if>
       </xsl:for-each>
       <xsl:choose>
        <!-- Pour les Petits enfants -->
        <xsl:when test="count(*[count(*)!=0])!=0">
          <td>
            <table border="1">
            <xsl:for-each select="*">
              <tr>
              <xsl:call-template name="aplati"/>
              </tr>
            </xsl:for-each>
            </table>
          </td>
        </xsl:when>
        <xsl:otherwise>
        </xsl:otherwise>
       </xsl:choose>
      </xsl:template>
      <!-- Fin Template aplati -->
     
      <xsl:template match="root">
     
        <table border="1">
     
    <!-- Faire un tri différent selon que le champ à trier soit une date  -->
    <!--!!! TEMPORAIRE !!!-->
    <xsl:choose>
      <xsl:when test="contains(*/*[name()=$champTri],'/')">
     
        <!-- Pour chaque ligne -->
        <xsl:for-each select="*">
          <xsl:sort select="concat(substring(*[name()=$champTri],7,4), substring(*[name()=$champTri],4,2), substring(*[name()=$champTri],1,2))" order="{$sensTri}"/>
     
          <tr>
          <!-- Pour chaque colone -->
          <xsl:for-each select="*">
            <!-- Pas de fils -->
            <xsl:if test="count(*)=0">
              <xsl:if test="name()!='ID'">
              <td>
                <xsl:value-of select="."/>
              </td>
              </xsl:if>
            </xsl:if>
            <xsl:if test="count(*)!=0">
              <xsl:call-template name="aplati"/>
            </xsl:if>
          </xsl:for-each>
          </tr>
        </xsl:for-each>
     
    </xsl:when>
    <xsl:otherwise>
     
        <!-- Pour chaque ligne -->
        <xsl:for-each select="*">
          <xsl:sort select="*[name()=$champTri]" order="{$sensTri}"/>
     
          <tr>
          <!-- Pour chaque colone -->
          <xsl:for-each select="*">
            <!-- Pas de fils -->
            <xsl:if test="count(*)=0">
              <xsl:if test="name()!='ID'">
              <td>
                <xsl:value-of select="."/>
              </td>
              </xsl:if>
            </xsl:if>
            <xsl:if test="count(*)!=0">
              <xsl:call-template name="aplati"/>
            </xsl:if>
          </xsl:for-each>
          </tr>
        </xsl:for-each>
     
    </xsl:otherwise>
    </xsl:choose>
     
        </table>
     
      </xsl:template>
     
    </xsl:stylesheet>
    Je teste donc l'existance d'un champ date (avec un / dans la valeur) et duplique mon pavé avec 2 sort différent... C'est pas terrible

Discussions similaires

  1. [XSLT] tri par date avec xsl:sort
    Par Tanebisse dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 15/04/2010, 16h06
  2. [XSLT] Tri de date par mois : comment faire ?
    Par sdkddk dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 04/08/2006, 21h37
  3. [XSLT] Tri de dates
    Par Zapan dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 09/02/2006, 16h36
  4. Réponses: 9
    Dernier message: 10/08/2004, 17h13
  5. Filtre, Tri, Index, Date
    Par gibet_b dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/07/2004, 16h30

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