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 :

recuperation de nom de fichier avec xslt [XSLT 2.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut recuperation de nom de fichier avec xslt
    Bonjour

    J'ai un fichier xml qui contient un ensemble de liens vers des images dont voici un petit exemple simplifié:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <ud id="TitreDuDocumentUD1PremierParagraphe-0C07571A" xsi:noNamespaceSchemaLocation="ud.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <image href="file:/C:/Users/graphics/arbortextsolution.gif"/>    
        <image href="file:/C:/Users/graphics/boatdraw.tif"/>
        <section id="TitreDeLaPremièreSectionPremierPara-0C0759EE">
            <titre>Titre de la première section</titre>        
            <image href="file:/C:/Users/graphics/satellite.tif"/>       
        </section>  
    </ud>
    je souhaiterai récuperer le nom de chacune des images pour le mettre dans un attribut en appliquant une feuille de style xslt.

    le resultat devrait ressembler a cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <ud id="TitreDuDocumentUD1PremierParagraphe-0C07571A" xsi:noNamespaceSchemaLocation="ud.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <image href="file:/C:/Users/graphics/arbortextsolution.gif" fileName="arbortextsolution.gif"/>    
        <image href="file:/C:/Users/graphics/boatdraw.tif" fileName="boatdraw.tif"/>
        <section id="TitreDeLaPremièreSectionPremierPara-0C0759EE">
            <titre>Titre de la première section</titre>        
            <image href="file:/C:/Users/graphics/satellite.tif" fileName="satellite.tif"/>        
        </section>  
    </ud>
    merci

  2. #2
    Membre émérite Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    Par défaut
    Vous n'avez rien à montrer en xslt, ce que vous avez fait?!

    Voici un template qui peut le faire (xslt 2.0 comme énoncé).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <xsl:template match="image[@href]">
        <xsl:copy>
            <xsl:apply-templates select="@*" />
            <xsl:attribute name="filename">
                <xsl:value-of select="tokenize(@href,'/')[last()]" />
            </xsl:attribute>
            <xsl:apply-templates select="*|text()|comment()|processing-instruction()" />
        </xsl:copy>
    </xsl:template>

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2010
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    re bonjour,

    Merci pour votre réponse, Je l'ai testé mais la fonction tokenize n'a pas été reconnu, j'utilise xproc pour appliquer la feuille de style.

    Donc finalement j'ai opté pour une solution recursive avec un substring-after puique je ne peux pas utiliser la fonction tokenize.

    Voici ma solution :

    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
     
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:output omit-xml-declaration="yes" indent="yes"/>
     
        <xsl:template match="node()|@*">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
            </xsl:copy>
        </xsl:template>
     
        <xsl:template name="extraction">
            <xsl:param name="fileHref"/>
            <xsl:choose>
                <xsl:when test="contains($fileHref,'/')">
                    <xsl:call-template name="extraction">
                        <xsl:with-param name="fileHref" select="substring-after($fileHref,'/')"/>
                    </xsl:call-template>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="$fileHref"/>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:template>
     
        <xsl:template match="image/@fileName">
            <xsl:variable name="fileHref" select="parent::node()/@href"/>
            <xsl:attribute name="fileName"> 
            <xsl:variable name="attr">           
                <xsl:call-template name="extraction">
                    <xsl:with-param name="fileHref" select="$fileHref"/>
                </xsl:call-template>
            </xsl:variable>        
                <xsl:value-of select="$attr"/>            
            </xsl:attribute>         
        </xsl:template>    
    </xsl:stylesheet>
    Ps : j'ai crée l'attribut "fileName" directement sous xproc et non pas avec la feuille de style

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    tokenize() fait partie de XPath 2.0, utilisé donc dans XSLT 2.0, ou alors EXSLT, qui n'est pas reconnu par beaucoup d'outils. Dans ces cas-là, le template récursif est la seule solution réaliste.

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

Discussions similaires

  1. [XSLT] Récupérer le nom du fichier XML
    Par silverspike dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/04/2006, 14h01
  2. Réponses: 3
    Dernier message: 12/07/2005, 13h33
  3. [ Debutant ] Recuperer un nom de fichier
    Par 13obscur dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 21/02/2005, 09h59
  4. changement de nom de fichier avec smartupload
    Par bourvil dans le forum ASP
    Réponses: 2
    Dernier message: 24/05/2004, 14h50

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