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] tri d'un fichier xml


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Rédacteur
    Avatar de Hinault Romaric
    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2007
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 4 570
    Billets dans le blog
    121
    Par défaut [XSLT] tri d'un fichier xml
    Bonjour,

    Cella fait quelque jours que je fait face à une difficulté dans la realisation d'une application. En fait la finalité de la procédure que je doit faire c'est prendre un document XML en entrer et retourner un document XML trie respectant la schéma du fichier de base.
    De ce fait j'ai décider d'utiliser XSLT pour faire le tri mais jusqu'ici ce que j'ai pu faire ne me retourne que la copie du document d'origine sans toute fois effectuer le trie.

    Voila la structure de 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
    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <!--liste des itinearaire d'une reponse SuperBB-->
    <Itineraires>
      <!--noued d'un itineraire qui peut etre aller et retour -->
      <itineraire>
        <!--liste des segements aller -->
        <segmentaller>
          <!--segemnt du vol -->
          <segment>
            <airv></airv> <!--Code compagnie aérienne -->
            <fltnum></fltnum> <!-- Numéro du vol -->
            <opsuf></opsuf> 
            <startdt></startdt> <!-- date de départ -->
            <startairp></startairp> <!-- Code aeroport de départ-->
            <endairp></endairp> <!-- code aeroprt de destination-->
            <starttm></starttm> <!--heure de départ -->
            <endtm></endtm> <!-- heure d'arriver -->
            <daychg></daychg> <!-- indik si le vol arrive le meme jour que le jour de départ -->
            <conx></conx> <!-- Indik si le vol est connecte au prochain -->
            <airpchg></airpchg> <!-- indik le changement de l'aeroport (non applicable au premier segment de vol d'une connexion) -->
            <equip></equip> <!-- indik si le changement d'équipement a lieu a un arret en route-->
            <numstops></numstops> <!-- nombre d'arret intermdiare -->
            <opairvInd></opairvInd> <!-- indique si le transporteur ci dessus differe du transporteur qui opére effectivement le vol -->
            <linksellagrmnt></linksellagrmnt> <!-- Type d'entente entre l'hote et le transporteur -->
            <GenTrafRestriction></GenTrafRestriction> <!--Indicateur de restriction de la circulation -->
            <DaysOperates></DaysOperates> <!-- affiche le jour de la semaine du vol-->
            <JrnyTm></JrnyTm> <!-- Durée total du vol-->
            <EndDt></EndDt> <!-- date d'arriver -->
            <OpAirV></OpAirV> <!-- code des transporteurs aerien pour le transporteur qui opere effectivement le vol-->
            <OpFltDesignator></OpFltDesignator> <!-- designateur du vol -->
            <OpFltSuf></OpFltSuf> <!-- Sufixe du vol d'exploitation -->
            <StartTerminal></StartTerminal> <!-- Terminal de départ -->
            <EndTerminal></EndTerminal> <!-- Terminal d'arriver -->
            <FltTm></FltTm> <!-- temp de vol ecoule en minute -->
            <lsaind></lsaind> <!-- indique si le transporteur a la disponibilite des derniere place -->
            <GalileoAirVInd></GalileoAirVInd> 
          </segment>
        </segmentaller>
        <!--liste des segements retour -->
        <segmentretour>
          <!--segemnt du vol -->
          <segment>
            <airv></airv> <!--Code compagnie aérienne -->
            <fltnum></fltnum> <!-- Numéro du vol -->
            <opsuf></opsuf>  <!-- Reserved Currently ignored -->
            <startdt></startdt>  <!-- date de départ -->
            <startairp></startairp>  <!-- Code aeroport de départ-->
            <endairp></endairp>  <!-- code aeroprt de destination-->
            <starttm></starttm>  <!--heure de départ -->
            <endtm></endtm>  <!-- heure d'arriver -->
            <daychg></daychg>  <!-- indik si le vol arrive le meme jour que le jour de départ -->
            <conx></conx>  <!-- Indik si le vol est connecte au prochain -->
            <airpchg></airpchg>  <!-- indik le changement de l'aeroport (non applicable au premier segment de vol d'une connexion) -->
            <equip></equip>  <!-- indik si le changement d'équipement a lieu a un arret en route-->
            <numstops></numstops>  <!-- nombre d'arret intermdiare -->
            <opairvInd></opairvInd>  <!-- indique si le transporteur ci dessus differe du transporteur qui opére effectivement le vol -->
            <linksellagrmnt></linksellagrmnt>  <!-- Type d'entente entre l'hote et le transporteur -->
            <GenTrafRestriction></GenTrafRestriction>  <!--Indicateur de restriction de la circulation -->
            <DaysOperates></DaysOperates>  <!-- affiche le jour de la semaine du vol-->
            <JrnyTm></JrnyTm>  <!-- Durée total du vol-->
            <EndDt></EndDt>  <!-- date d'arriver -->
            <OpAirV></OpAirV>  <!-- code des transporteurs aerien pour le transporteur qui opere effectivement le vol-->
            <OpFltDesignator></OpFltDesignator>  <!-- designateur du vol -->
            <OpFltSuf></OpFltSuf>  <!-- Sufixe du vol d'exploitation -->
            <StartTerminal></StartTerminal>  <!-- Terminal de départ -->
            <EndTerminal></EndTerminal>  <!-- Terminal d'arriver -->
            <FltTm></FltTm>  <!-- temp de vol ecoule en minute -->
            <lsaind></lsaind>  <!-- indique si le transporteur a la disponibilite des derniere place -->
            <GalileoAirVInd></GalileoAirVInd>  <!-- indique si le transporteur est un participant galileo -->
          </segment>
        </segmentretour>
         <!-- Information sur le tarif du vol -->
        <fareinfos>
          <UniqueKey></UniqueKey> <!-- description nombre de passager -->
          <QuoteNum></QuoteNum> <!-- numero de soumission -->
          <QuoteType></QuoteType> <!-- Type de dévise en cour de traitement -->
          <LastTkDt></LastTkDt> <!-- Derniére mise a jour de soumission -->
          <QuoteDt></QuoteDt> <!-- Date de citation -->
          <IntlSaleInd></IntlSaleInd> <!-- Indicateur de vente international-->
          <BaseFareCurrency></BaseFareCurrency> <!-- Code de la devise dans laquel le tarif de base est fixé-->
          <BaseFareAmt></BaseFareAmt> <!-- tarif de base montant -->
          <EquivCurrency></EquivCurrency> <!-- Code de la devise dans laquelle le montant équivalent est spécifié-->
          <EquivAmt></EquivAmt> <!-- montant tarif de base convertir dans la devise du pays de paiement-->
          <EquivDecPos></EquivDecPos> <!-- nombre de décimal pour tarif équivalent -->
          <TotCurrency></TotCurrency> <!-- Code de la devise du montant totale -->
          <TotAmt></TotAmt> <!-- tarif de base -->
          <TotDecPos></TotDecPos> <!-- Nombre de decimal pour le prix du transporteur aérien-->
        </fareinfos>
      </itineraire>
    </Itineraires>
    et la c'est le fichier XSL que j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:template match="/">
        <Itineraires>
          <xsl:for-each select="Itineraires/itineraire">
            <xsl:sort select="fareinfos/TotAmt" data-type="number" order="ascending"/>
          </xsl:for-each>
        </Itineraires>
      </xsl:template>
      <xsl:template match="/">
        <xsl:copy-of select="."/>
      </xsl:template>
    </xsl:stylesheet>
    donc j'aimerais effectuer un tri en fonction du montant qui est entre les balises <TotAmt>. Je ne comprend vraiment pas pourquoi cella ne marche pas.

    Je compte sur votre aide, merci.

    @++
    Vous souhaitez participer aux rubriques .NET ? Contactez-moi

    Si déboguer est l’art de corriger les bugs, alors programmer est l’art d’en faire
    Mon blog, Mes articles, Me suivre sur Twitter
    En posant correctement votre problème, on trouve la moitié de la solution

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    tu as deux templates avec le même match.
    Dans ce cas XSLT prend la dernière déclarée qui dans ton cas se contente de recopier le document



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
      <xsl:template match="/">
        <Itineraires>
          <xsl:for-each select="Itineraires/itineraire">
            <xsl:sort select="fareinfos/TotAmt" data-type="number" order="ascending"/>
                  <xsl:copy-of select="."/>
          </xsl:for-each>
        </Itineraires>
      </xsl:template>
      </xsl:stylesheet>

Discussions similaires

  1. [XSLT] requete dans un fichier xml
    Par tourearc dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 14/06/2007, 11h21
  2. [XSLT] Restructuration d'un fichier XML
    Par biggione dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 13/06/2007, 10h21
  3. [XSLT] transfo d'un fichier XML en plusieurs fichiers XML
    Par doudou_rennes dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/11/2006, 12h01
  4. [XSLT] Comment lier un fichier XML et XSLT
    Par bitou dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/08/2006, 15h35
  5. XSLT traiter recursivement un fichier xml
    Par davelo dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 26/02/2006, 10h52

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