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 :

[XPATh] Filtrer les chemins


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 12
    Points
    12
    Par défaut [XPATh] Filtrer les chemins
    Bonsoir,
    Je bloc sur du XPATH : Je désire avoir les chemins des différents dossier des images (sans doublon).

    Voila le fichier XML concerné :

    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
     
    <channel>
    <images>
    <item nom="Colline verdoyante" folder="wallpaper">
    C:\Projet en cours\Wallpaper\wallpaper\Colline verdoyante.BMP
    </item>
    <item nom="Collines" folder="wallpaper">
    C:\Projet en cours\Wallpaper\wallpaper\Collines.jpg
    </item>
    <item nom="Paysages01" folder="Paysages">
    C:\Documents and Settings\JB\Mes documents\Mes images\Paysages\Paysages01.jpg
    </item>
    <item nom="Paysages02" folder="Paysages" >
    C:\Documents and Settings\JB\Mes documents\Mes images\Paysages\Paysages02.jpg
    </item>
    <item nom="Neige08" folder="wallpaper">
    C:\Documents and Settings\JB\Mes documents\Mes images\wallpaper\Neige08.jpg
    </item>
    </images>
    </channel>
    Je désire récupérer :

    C:\Projet en cours\Wallpaper\wallpaper\
    C:\Documents and Settings\JB\Mes documents\Mes images\Paysages\
    C:\Documents and Settings\JB\Mes documents\Mes images\wallpaper\

    Donc j'ai réalisé une boucle For en xsl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:for-each select="images/item[not(@folder=preceding-sibling::item/@folder)]">
    <xsl:sort select="@folder"/>
    <xsl:value-of select="concat(substring-before(., concat('\',@folder,'\')), '\', @folder)"/>
    </xsl:for-each>

    Mais la ca me sort juste :

    C:\Documents and Settings\JB\Mes documents\Mes images\Paysages
    C:\Projet en cours\Wallpaper\wallpaper

    Il ne fait pas la diffèrence avec les dossiers du même nom...

    Comment résoudre ce problème ?

    PS: L'attribut folder correspond toujours au dossier ou est situé l'image
    et nom le nom de l'image sans l'extension

  2. #2
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    pourquoi ne pas faire ton test sur le contenu de "item" et non sur @folder?

    un truc genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <xsl:for-each select="images/item[not(concat(substring-before(., concat('\',@folder,'\')), '\', @folder)=preceding-sibling::item/text())]">
    <xsl:sort select="@folder"/>
    <xsl:value-of select="concat(substring-before(., concat('\',@folder,'\')), '\', @folder)"/>
    </xsl:for-each>

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Non cela me renvoi les chemins de toutes les images

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    Voila ce que j'ai essayé aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:for-each select="images/item[not(
    concat(substring-before(., concat('\',@folder,'\')), '\', @folder, '\')
    = 
    concat(substring-before( preceding-sibling::item/., concat('\',preceding-sibling::item/@folder,'\')), '\',  preceding-sibling::item/@folder, '\')
    )]">
    <item><xsl:value-of select="concat(substring-before(., concat('\',@folder,'\')), '\', @folder)"/></item>
    </xsl:for-each>
    Ce code me renvoi :

    C:\Projet en cours\Wallpaper\wallpaper
    C:\Documents and Settings\JB\Mes documents\Mes images\wallpaper
    C:\Documents and Settings\JB\Mes documents\Mes images\Paysages
    C:\Documents and Settings\JB\Mes documents\Mes images\Paysages
    C:\Documents and Settings\JB\Mes documents\Mes images\Paysages

    Je ne comprend pas pourquoi le dossier Paysages est en doublon tandis que les autres sont bien filtrés...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 25
    Points : 12
    Points
    12
    Par défaut
    J'ai trouvé mon bonheur.

    J'ai réalisé la méthode "muenchian" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:for-each select="images/item[generate-id(.) = generate-id(key('item', concat(substring-before(., concat('\',@folder,'\')), '\', @folder, '\'))[1])]"> 
    <item><xsl:value-of select="concat(substring-before(., concat('\',@folder,'\')), '\', @folder)"/></item>
    </xsl:for-each>

    Sublime, magnifique

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

Discussions similaires

  1. [XML] [XMLReader] Obtenir les chemins XPath
    Par maquejp dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 07/01/2008, 17h32
  2. Filtrer les voyelles
    Par Babyneedle dans le forum Langage SQL
    Réponses: 9
    Dernier message: 22/12/2003, 15h12
  3. specifier les chemins des .class
    Par draken dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 29/07/2003, 09h35
  4. peut on filtrer les adresses IP ?
    Par travail dans le forum 4D
    Réponses: 2
    Dernier message: 04/06/2003, 14h16
  5. XPath: intersection de chemins
    Par aldo047 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 13/03/2003, 10h30

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