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] Trie mettre ceux qui n'en contienne pas à la fin


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut [XSLT] Trie mettre ceux qui n'en contienne pas à la fin
    Bonjour à vous tous,

    Dans mon XSLT je veux trier mes éléments Personne d'après trois critères. Mon problème est que les personne qui ne contienne pas de Fonction (premier paramètre de tri) sont renvoyés avec celle qui en ont (le reste du tri est correcte). Y a t'il un moyen de les faire venir à la fin?

    XSLT:
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    	<xsl:template match="/">
    <xsl:apply-templates select="PersonneList"/>	
    	</xsl:template>
    	<xsl:template match="PersonneList">
    	<xsl:element name="{local-name()}">
    		<xsl:apply-templates select="Personne">
    			<xsl:sort data-type="number" select="Fonction/F/@Number" order="ascending"/>
    			<xsl:sort data-type="number" select="Signature/S/@Number" order="ascending"/>
    			<xsl:sort data-type="text" select="Personnel/Nom" order="ascending"/>
    		</xsl:apply-templates>
    	</xsl:element>
    	</xsl:template>
    	<xsl:template match="Person">
    <xsl:copy-of select="."/>	
    	</xsl:template>
    <xsl:template match="*">
    		<xsl:copy>
    			<xsl:apply-templates select="@*"/>
    			<xsl:apply-templates/>
    		</xsl:copy>
    	</xsl:template>
    	<xsl:template match="@*">
    		<xsl:copy-of select="."/>
    	</xsl:template>
    	<xsl:template match="text()[normalize-space() = '']"/>
    </xsl:stylesheet>
    Merci

  2. #2
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Points : 786
    Points
    786
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:apply-templates select="Personne">
      <xsl:sort data-type="number" select="Fonction/F/@Number" order="ascending"/>
      <xsl:sort data-type="number" select="Signature/S/@Number" order="ascending"/>
      <xsl:sort data-type="text" select="Personnel/Nom" order="ascending"/>
    </xsl:apply-templates>
    ne peux tu pas répéter le apply-template en spécifiant l existance de Fonction ou pas?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <xsl:apply-templates select="Personne[Fonction]">....blabla sort
    <xsl:apply-templates select="Personne[not(Fonction)]">...blabla sort

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 159
    Points : 77
    Points
    77
    Par défaut
    Salut,

    Merci pour ta réponse.

    Mais je sais pas comment faire car moi ce que j'aimerais faire c'est un tri mais rien modifier d'autre hors si j'appelle un l'apply-template avec un select ca ne marche plus.

    La seul chose qui est fixe est l'élément PersonneList.

    Comment puis-je faire?

    mon 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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
    	<xsl:template match="/">
    <xsl:apply-templates select="PersonneList"/>	
    	</xsl:template>
    	<xsl:template match="PersonneList">
    	<xsl:element name="{local-name()}">
    		<xsl:apply-templates>
    			<xsl:sort data-type="number" select="Fonction/F/@Number" order="ascending"/>
    			<xsl:sort data-type="number" select="Signature/S/@Number" order="ascending"/>
    			<xsl:sort data-type="text" select="Personnel/Nom" order="ascending"/>
    		</xsl:apply-templates>
    	</xsl:element>
    	</xsl:template>
    <xsl:template match="*">
    		<xsl:copy>
    			<xsl:apply-templates select="@*"/>
    			<xsl:apply-templates/>
    		</xsl:copy>
    	</xsl:template>
    	<xsl:template match="@*">
    		<xsl:copy-of select="."/>
    	</xsl:template>
    	<xsl:template match="text()[normalize-space() = '']"/>
    </xsl:stylesheet>
    Merci

Discussions similaires

  1. Facebook ficherait aussi ceux qui ne l'utilisent pas
    Par Gordon Fowler dans le forum Débats sur le développement - Le Best Of
    Réponses: 45
    Dernier message: 20/04/2012, 12h11
  2. Les meilleurs programmeurs sont-ils ceux qui disent connaître C ++ ? Pas si sûr !
    Par Katleen Erna dans le forum Langages de programmation
    Réponses: 61
    Dernier message: 26/05/2010, 11h30
  3. Réponses: 0
    Dernier message: 01/04/2010, 22h57
  4. Réponses: 3
    Dernier message: 27/04/2007, 09h56

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