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 :

concaténer chemin et contenu d'un tag


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Points : 14
    Points
    14
    Par défaut concaténer chemin et contenu d'un tag
    Bonjour,
    j'ai des dans mon xsl des variables qui sont ainsi:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="racine_f" select="/f" />
    <xsl:variable name="langue" select="$racine_f/@langue"/>
    <xsl:variable name="labels" select="document(concat('../api/label_api', $langue, '.xml'))"/>
    le fichier défini par $labels contient différent tag avec du contenu texte pour chacune des langues. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <static_labels>
    ...
    <lab57>Montant actuel</lab57>
    <lab58>dès le</lab58>
    <toto>TEST</toto>
    ...
    </static_labels>
    et j'y fais en principe appel ainsi dans mon xsl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="$labels/static_labels/lab56"/>
    Dans certain cas, j'aimerai pouvoir récupérer le contenu d'un tag de mon xml pour aller récupérer le bon label dans mon fichier $labels
    Par exemple, j'ai le tag <message>toto</message> dans mon xml et j'aimerai à ce moment aller récupérer le label correspondant soit $labels/static_labels/toto dans mon fichier de labels

    J'ai essayé sans succès, plusieurs choses de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:for-each select="./message">  
      <P class="message">
          <xsl:value-of select="concat($labels, '/static_labels/',.)"/>
      </P>
    </xsl:for-each>
    Des suggestions ?

    Merci d'avance pour l'aide
    Bonne journée
    Gaëlle

  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
    On ne peut pas compter sur le xslt propre étalé par w3c recommendation les foctionnalités noyaux que les moteurs conformes doient supporter. Pourtant, il existe des fonctionnalités d'extension implémentées pour certaines réalisations de référence, comme saxon...
    https://www.saxonica.com/html/docume...functions.html

    En gros, on définit le namespace d'extensibilité dans la racine:
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:saxon="http://saxon.sf.net/"
        exclude-result-prefixes="saxon"
    >

    Et puis, dans votre cas, on fait comme ça:
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="saxon:evaluate($labels/static_labels/lab56") />
    ou pour l'autre cas:
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="saxon:evaluate(concat($labels, '/static_labels/',.))"/>

    Bien entendu, saxon n'est pas la seule d'avoir ce genre d'extension.

  3. #3
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Ou, sans extension,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="$labels/static_labels/*[name() = current()]"/>
    Juste prendre les éléments de <static_label> dont le nom est égal au contenu de la balise en cours.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 15
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup pour vos réponses.
    J'ai opté pour la deuxième solution qui fonctionne très bien !

  5. #5
    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
    Très bien. Si "la deuxième option" marche pour vous, ça veut dire que j'avais mal compris la question. Tant pire pour moi !

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

Discussions similaires

  1. Récupérer un chemin-cible contenu dans une variable
    Par Myrrdin dans le forum ActionScript 1 & ActionScript 2
    Réponses: 14
    Dernier message: 04/07/2010, 13h24
  2. Récuperer les info contenu dans les tags mp3
    Par Salsaboy60 dans le forum IHM
    Réponses: 2
    Dernier message: 07/04/2009, 02h58
  3. [JDOM] Récuperer tout le contenu d'un tag
    Par laminoo dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 18/03/2009, 18h48
  4. Réponses: 7
    Dernier message: 23/03/2007, 19h49
  5. [langage]Retirer le contenu d'un tag
    Par argister dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2005, 00h40

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