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] Recherche du contenu d'un tag dont le nom est en param sur un autre tag


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Par défaut [XPath] Recherche du contenu d'un tag dont le nom est en param sur un autre tag
    Bonjour à tous!

    Je voudrais recupérer la valeur d'un tag dont le nom est en paramètre sur un autre tag:
    file.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml?>
    <model>
    <title>bonjour</title>
    <description>description de bonjour</description>
    </model>
     
    <print ref="title"/>
    file.xsl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <xsl:template match="/print">
    <xsl:value-of select="ICI JE VOUDRAIS RECUPERER LA VALEUR DU TAG DONT LE NOM EST DANS LE PARAMETRE ref
     (soit dans l'example 'bonjour' puisque ref = "title"/>
    </xsl:template>
    J'ai essayé ça (ne fonctionne pas bien sûr):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="/model//*[name(/model//*) = ./@ref][0]"/>
    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Par défaut
    Finalement, j'ai trouvé une première solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <xsl:variable name="ref" select="./@ref"/>
    <xsl:value-of select="/model//*[name() = $ref]"/>
    Par contre, je suis obligé de déclarer préalablement la variable $ref afin de pouvoir y faire référence dans value-of. N'y a t'il pas un moyen pour faire référence au contenu de l'attribut courant "ref" directement dans l'expression xpath?

  3. #3
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    essaie avec current()/@ref
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 18
    Par défaut
    Impec, ça marche

    Sinon, entre temps, ça s'est compliqué, je sais pas si je dois ouvrir un autre topic pour ça sachant que le problème est assez proche:

    Je voudrais maintenant que @ref fasse référence à un chemin depuis model et non plus à un simple nom.

    File.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
     
    <?xml?>
    <model>
    <list1>
    <title>bonjour</title>
    <description>description de bonjour</description>
    </list1>
    <list2>
    <title>bonjour2</title>
    <description>description de bonjour2</description>
    </list2>
    </model>
     
    <print ref="list1/title"/>
    Y a t-il des fonctions pour ça?
    (un truc du genre <xsl:value-of select="/model//*[path() = current()/@ref]"/>

  5. #5
    Expert confirmé
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Par défaut
    non, ça c'est impossible, désolé, il va te falloir décomposer ton chemin (et ça risque d'être lourd et pas terrible )
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  6. #6
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut
    Si le nombre de niveaux du chemin est figé à 2, il y a une solution (certes peu élégante) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="/model/*/*[concat(name(parent::*), '/', name()) = current()/@ref]"/>
    Si le nombre de niveaux varie d'un élément <print> à l'autre, alors il faut soit écrire une fonction XSLT dédiée comme l'indique Swoög, soit utiliser une fonction d'évaluation de XPath à condition que ton processeur XSLTpropose cette extension.
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

Discussions similaires

  1. Instancier une classe dont le nom est contenu dans une String
    Par fyque dans le forum Général Python
    Réponses: 15
    Dernier message: 13/06/2008, 12h33
  2. Réponses: 7
    Dernier message: 25/05/2008, 14h02
  3. Réponses: 7
    Dernier message: 25/10/2005, 15h19
  4. Réponses: 2
    Dernier message: 21/09/2005, 13h35
  5. [Reflection] Executer une fonction dont le nom est contenu dans un String
    Par christobal dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 05/07/2004, 15h23

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