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-XPATH-XslCompiledTransform]Problème de date


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Points : 64
    Points
    64
    Par défaut [XSL-XPATH-XslCompiledTransform]Problème de date
    Bonjour,
    J'ai une application qui reprend un tableau avec des données XML. Voici mon fichier XML:
    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
    <?xml version="1.0" encoding="utf-8"?>
    <Activites>
        <Activite Id="1">
            <Nom>WEEK-END DE DETENTE</Nom>
            <Lieu>Fromelenne</Lieu>
            <Depart>31/01/2010</Depart>
            <Retour>02/02/2010</Retour>
            <Places>8</Places>
            <Prix>75,00</Prix>
    	</Activite>
        <Activite Id="2">
            <Nom>VACANCES DE CARNAVAL</Nom>
            <Lieu>Venise</Lieu>
            <Depart>17/02/2010</Depart>
            <Retour>25/02/2010</Retour>
            <Places>8</Places>
            <Prix>450,00</Prix>
        </Activite>
    </Activites>
    Comme je désirais n'afficher que les données dont la date 'Départ' n'était pas périmée, je dois comparer cette date Départ avec la date du jour. Pour ce faire, au moment du load de la page, je transforme le fichier XSL avec une méthode qui ajoute à mes données la date du jour et une valeur (0 ou 1) qui m'indique si l'activité est périmée. Et je fais intervenir un XPath pour n'afficher que les bonnes données.
    Voici le code:
    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
     
    public static void TranformerXSLFile(string NomFichierXML, string NomFichierXSL)
        {
            string sPath = "MonChemin\\Datas\\";
            string sVirtualPath = sPath + NomFichierXSL;
            // Création du XslCompiledTransform et chargement de la feuille de style.
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load(sVirtualPath);
            // Création du XsltArgumentList.
            XsltArgumentList xslArg = new XsltArgumentList();
            // Création du paramètre qui représente la date du jour.
            DateTime d = DateTime.Now;
            xslArg.AddParam("date", "", d.ToShortDateString());
            // Création du writer.
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = "\t";
            XmlWriter writer = XmlWriter.Create(sPath + "output4.xml", settings);
            // Transformation du fichier.
            xslt.Transform(sPath + NomFichierXML, xslArg, writer);
            writer.Close();
            xslt.TemporaryFiles.Delete();
        }
    Et voici le code du fichier 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
    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
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:param name="date"/>
      <xsl:template match="/">
          <xsl:for-each select="Activites">
              <xsl:element name="Activites">
                  <xsl:for-each select="Activite">
                      <xsl:element name="Activite">
                          <xsl:attribute name="Id">
                              <xsl:value-of select="@Id"/>
                          </xsl:attribute>
                          <xsl:attribute name="Nom">
                              <xsl:value-of select="Nom"/>
                          </xsl:attribute>
                          <xsl:attribute name="Lieu">
                              <xsl:value-of select="Lieu"/>
                          </xsl:attribute>
                          <xsl:attribute name="Depart">
                              <xsl:value-of select="Depart"/>
                          </xsl:attribute>
                          <xsl:attribute name="Retour">
                              <xsl:value-of select="Retour"/>
                          </xsl:attribute>
                          <xsl:attribute name="Places">
                              <xsl:value-of select="Places"/>
                          </xsl:attribute>
                          <xsl:attribute name="Prix">
                              <xsl:value-of select="Prix"/>
                          </xsl:attribute>
                          <xsl:attribute name="Date">
                              <xsl:value-of select="$date"/>
                          </xsl:attribute>
                          <xsl:attribute name="value">
                              <xsl:variable name="res">
                                  <xsl:call-template name="CompDate">
                                      <xsl:with-param name="date1" select="Depart"/>
                                      <xsl:with-param name="date2" select="Date"/>
                                  </xsl:call-template>
                              </xsl:variable>
                              <xsl:value-of select="$res"/>
                          </xsl:attribute>
                      </xsl:element>
                  </xsl:for-each>
              </xsl:element>
          </xsl:for-each>
      </xsl:template>
        <xsl:template name="CompDate">
            <xsl:param name="date1"/>
            <xsl:param name="date2"/>
            <xsl:variable name="d1" select="number(concat(substring($date1, 7, 4),substring($date1, 4, 2),substring($date1, 1, 2)))"/>
            <xsl:variable name="d2" select="number(concat(substring($date2, 7, 4),substring($date2, 4, 2),substring($date2, 1, 2)))"/>
            <xsl:choose>
                <xsl:when test="$d1&gt;$d2">1</xsl:when>
                <xsl:when test="$d1&lt;=$d2">0</xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="$d2"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:template>
        </xsl:stylesheet>
    Seulement, je m'aperçois qu'il n'arrive pas à effectuer une comparaison de date parce que la valeur de $d2 est NaN (NotaNumber). Pourtant l'argumentList envoyé par le XslCompiledTransform est un '.ToShortDateString()'. J'ai essayé avec number($d2) mais cela ne marche pas.
    Une piste ?
    ----------------------------------------
    Merci pour votre aide précieuse.
    Mictou

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Points : 64
    Points
    64
    Par défaut
    J'ai trouvé de quoi il s'agissait.
    L'argument 'date' que j'introduis avec mon XslCompiledTransform est du format (d/MM/yyyy) alors qu'il doit être (dd/MM/yyyy) pour pouvoir être concaténé et converti en number.
    Tout fonctionne donc correctement. Mon gridView ne m'affiche que les données dont la date n'est pas périmée grâce à un XPath:
    ----------------------------------------
    Merci pour votre aide précieuse.
    Mictou

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

Discussions similaires

  1. [XSLT] problème de boucle imbriquée en xsl/xpath
    Par lol88 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/10/2009, 18h30
  2. problème de date
    Par baboune dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 10/06/2004, 10h52
  3. Problème de date dans MONTHS_BETWEEN
    Par ghostlord79 dans le forum Oracle
    Réponses: 10
    Dernier message: 07/04/2004, 11h21
  4. Problème conversion date
    Par mat.M dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/03/2004, 15h05
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

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