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 :

[XSL] Stocker un jeu de noeud dans une variable


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par défaut [XSL] Stocker un jeu de noeud dans une variable
    Bonjour,

    Stocker un jeu de noeud dans une variable est possible si l'on utilise l'attribut select de xsl:variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="var" select="//b" />
    En revanche, je désire définir le contenu de la variable entre ses balises et non par select, parce que notement, j'ai besoin de tests conditionnels pour le choix de l'affectation, je n'obtient plus un jeu de noeuds.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="var">
     <xsl:value-of select="//b" />
    </xsl:variable>
    Reformuler autrement, j'aimerais bien qu'un call-template puisse me retourner un jeu de noeud, de la même manière.

    J'utilise le moteur XSLT de Firefox qui me donne une erreur lorsque j'essaie d'accèder à la propriété p d'un noeud b du code test.xml suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="test.xsl"?>
    <a>
     <b p="1">x</b>
     <b p="2">y</b>
     <b p="3">z</b>
    </a>
    le fichier test.xsl étant :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="html" indent="yes" encoding="UTF-8" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" />
     
    <xsl:template match="/">
     <html>
      <body>
       <xsl:variable name="var">
        <xsl:call-template name="fonction" />
       </xsl:variable>
       <xsl:value-of select="//b[@p = '2']" />
       <br />
       <xsl:value-of select="$var" />
       <br />
       <xsl:value-of select="$var/@p" />
      </body>
     </html>
    </xsl:template>
     
    <xsl:template name="fonction">
     <xsl:value-of select="//b[@p = '2']" />
    </xsl:template>
     
    </xsl:stylesheet>
    La ligne fautive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       <xsl:value-of select="$var/@p" />
    Les deux premiers value-of affichent le contenu de la balise b c'est à dire "y". J'ai tenté à tout hasard un copy-of à la place de value-of dans le template "fonction".

    Avez vous une solution à ce problème ?


    Blustuff.

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    ce n'est pas possible en xslt 1.0 mais ça l'ai avec xslt 2.0 .
    Voir du coté du processeur saxon pour ça

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par défaut
    Diantre... Mes rêves s'envolent...

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par défaut
    Ah j'aurais peut être une solution avec key... mais... peut on référencer des éléments d'un autre document xml (fonction xpath document) avec xsl:key ?

  5. #5
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Par défaut
    Citation Envoyé par Blustuff
    Ah j'aurais peut être une solution avec key... mais... peut on référencer des éléments d'un autre document xml (fonction xpath document) avec xsl:key ?
    Oui et non
    xsl:key fonctionne sur le "xml courant"
    Soit doc1 ton document de base et docExt celui que tu appelles.
    Si ton noeud courant (voir ici)appartient à doc1 la fonction key ne te renverra que des noeuds appartenant à doc1 et idem pour docExt.
    Pour parer à ça on peut généralement utiliser une astuce.
    On sauvegarde dans une ou plusieurs variables les elements de doc1 , on crée une boucle "fictive" sur docExt, et on fait le lien à l'intérieur de cette boucle en utilsant la ou les variables précédentes ou vice versa varaibles dur docExt, boucle fictive sur doc1

    je suis assez clair ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    842
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 842
    Par défaut
    Euh... j'ai du mal a comprendre... xsl:key ne devrait pas etre en dehors de xsl:template ? La notion de noeud courant me parait alors plutot floue :/

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

Discussions similaires

  1. Supprimer un certain noeud dans une variable XML
    Par benthebest dans le forum jQuery
    Réponses: 3
    Dernier message: 30/09/2009, 18h07
  2. [VBS]Stocker résultat d'un SELECT dans une variable
    Par harry le ravi dans le forum VBScript
    Réponses: 2
    Dernier message: 13/08/2009, 12h52
  3. [XSLT]mettre un noeud dans une variable
    Par Morbo dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 15/06/2007, 21h28
  4. Stocker un couple de registres dans une variable
    Par Snake39 dans le forum Assembleur
    Réponses: 4
    Dernier message: 16/11/2006, 10h29
  5. Stocker un noeud dans une variable
    Par Devotion dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 23/09/2004, 17h02

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