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

XMLRAD Discussion :

xpath dynamique dans un xsl:value-of


Sujet :

XMLRAD

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut xpath dynamique dans un xsl:value-of
    Hello XMLRaders!

    Petite question XSL:
    Ce que je veux faire c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="myXpath" select="/mon/chemin/xpath/genere" />
    ...
    <xsl:value-of select="$myXpath" />
    Probleme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="$myXpath" />
    me renvoie la chaine xpath et PAS la valeur pointe par mon xpath!!!
    Alors que si je met en "dur" le chemin ds mon xsl:value-of (donc sans passer par une variable), j'obtiens bien la valeur pointee par ce chemin xpath.

    Thanks for your help!

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 520
    Points : 1 446
    Points
    1 446
    Par défaut
    Je crois que ce n'est pas possible, j'avais déjà buté sur le problème...
    Il faut trouver un autre moyen de faire la même chose. Va voir dans le forum XSL, y'a des bêtes du XSL là bas ;-)

  3. #3
    Membre actif Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Points : 278
    Points
    278
    Par défaut
    Hello,
    et en utilisant ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select="msxsl:node-set($myXpath)"
    Est ce que ca fonctionne ?

    Michael

  4. #4
    Membre actif Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Points : 278
    Points
    278
    Par défaut
    J'ai omis de préciser qu'il te faudra ajouter cette ligne dans les attributs de ton xsl:stylesheet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    (genre de "déclaration" du domaine de nom)

    Michael

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Jeweller
    J'ai omis de préciser qu'il te faudra ajouter cette ligne dans les attributs de ton xsl:stylesheet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    (genre de "déclaration" du domaine de nom)

    Michael
    Thanks Michael!
    Merci pour la declaration du namespace, car j'avais effectivement des pb pour faire fonctionner le msxsl:node-set().
    Mais malheureusement, ça ne resout tjs pas mon probleme, ça me retourne toujours la chaine Xpath et NON la valeur pointée par celle-ci.

    Je continuerai à chercher comment faire "evaluer" au select de mon xsl:value-of ce Xpath (contenu dans une variable).

    A+ si j'ai du nouveau!

    Harold

  6. #6
    Membre actif Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Points : 278
    Points
    278
    Par défaut
    Peut etre faut-il prendre le problème à l'envers... tu génères un xpath si jai bien compris, le soucis se situe peut etre la! Car si tu as un "xpath" dans une variable, le value-of est capable de l'interprété. Il y a une grosse différence entre ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:variable name="row" select="."/>
    et ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:variable name="row">
    	<xsl:value-of select="."/>
    </xsl:variable>
    Dans le premier cas tu peux faire ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="$row/*[name() = $DuTexte]"/>
    et dans le deuxieme tu peux faire ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="$UnXPath/*[name() = $row]"/>

    Voici un exemple de génération de xpath qui fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:variable name="DATAS">
    	<xsl:value-of select="@name"/>S</xsl:variable>
    <xsl:variable name="DATA">
    	<xsl:value-of select="@name"/>
    </xsl:variable>
    <xsl:variable name="xpathData" select="/document/*[name() = $DATAS]/*[name() = $DATA]"/>

    je pense donc que c'est ton xpath généré qui n'est pas bon. Comment le génères tu ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Voici un extrait de mon doc 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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <document>
    	..
    	<ERR_MSG>
    		<ENGLISH>
    			..
    			<MSG_TOTO>bla bla in english</MSG_TOTO>
    			..
    		</ENGLISH>
    		<FRANCAIS>
    			...
    			<MSG_TOTO>bla bla en francais</MSG_TOTO>
    			...
    		</FRANCAIS>
    	</ERR_MSG>
    	<XMLC_Profile>
    		<XMLC_ProfileName>Standard</XMLC_ProfileName>
    		<XMLC_ActionMenuPosition>LEFT</XMLC_ActionMenuPosition>
    		<XMLC_Culture>FR</XMLC_Culture>
    		<XMLC_DisplayActionMenu>1</XMLC_DisplayActionMenu>
    		<XMLC_DisplayButtonPad>1</XMLC_DisplayButtonPad>
    		<XMLC_DisplayButtonRollover>1</XMLC_DisplayButtonRollover>
    		<XMLC_DisplayHeaderGradient>0</XMLC_DisplayHeaderGradient>
    		<XMLC_DisplayPageTitle>1</XMLC_DisplayPageTitle>
    		<XMLC_DisplayTabControl>1</XMLC_DisplayTabControl>
    		<XMLC_DisplayTabs>1</XMLC_DisplayTabs>
    		<XMLC_DisplayToolbar>1</XMLC_DisplayToolbar>
    		<XMLC_DisplayToolbarButtonPad>1</XMLC_DisplayToolbarButtonPad>
    		<XMLC_DisplayToolbarGradient>0</XMLC_DisplayToolbarGradient>
    		<XMLC_DisplayToolbarRollover>1</XMLC_DisplayToolbarRollover>
    		<XMLC_Language>FRANCAIS</XMLC_Language>
    		<XMLC_MainAction/>
    		<XMLC_MenuWidth>250</XMLC_MenuWidth>
    		<XMLC_Pictos>msn</XMLC_Pictos>
    		<XMLC_Skin>graylight</XMLC_Skin>
    		<TreeviewStyle>XP</TreeviewStyle>
    	</XMLC_Profile>
    	...
    </document>
    et voici la partie de mon xsl sur laquelle j'ai le probleme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:variable name="err_msg_path">/document/ERR_MSG/<xsl:value-of select="/document/XMLC_Profile/XMLC_Language"></xsl:value-of>/MSG_TOTO</xsl:variable>
     
    <xsl:call-template name="xslc:Message">
        <xsl:with-param name="Message"><xsl:value-of select="$err_msg_path" /></xsl:with-param>
    </xsl:call-template>
    Peut-etre est-ce un peu plus clair?

    Harold

  8. #8
    Membre actif Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Points : 278
    Points
    278
    Par défaut
    Oui, c'est normal, tu ne peux pas faire comme cela.
    Voici une solution qui devrait fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <xsl:variable name="langue">
    <xsl:value-of select="/document/XMLC_Profile/XMLC_Language">
    </xsl:variable>
     
    <xsl:variable name="err_msg_path" select="/document/ERR_MSG/*[name() = $langue]"/>
    Ensuite libre à toi de faire un truc dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:call-template name="xslc:Message"> 
        <xsl:with-param name="Message"><xsl:value-of select="$err_msg_path/MSG_TOTO" /></xsl:with-param> 
    </xsl:call-template>
    Biensur on peut aussi directement ajouter le MSG_TOTO dans la variable.

    Mais tu peux aussi te baser sur les locales non ?
    Michael

  9. #9
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 30
    Points : 34
    Points
    34
    Par défaut utilisation xsl:variable
    et si tu essayais :
    <xsl:variable name="erreur" select="/document/ERR_MSG"/>

    puis plus loin :
    <xsl:call-template name="xslc:Message">
    <xsl:with-param name="Message" select="$erreur"/>

    Georges

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Super! Ca marche.
    Merci BEAUCOUP Michael!!!!

    PS: est-ce que c'etait parce que j'etais ds un call-template que ça ne marchait pas?

    Harold

  11. #11
    Nouveau membre du Club
    Inscrit en
    Janvier 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 30
    Points : 34
    Points
    34
    Par défaut select évalue l'xpath
    c'est parceque tu n'utilisais pas select qui évalue le xpath

  12. #12
    Membre actif Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Points : 278
    Points
    278
    Par défaut
    Non, rien à voir. C'est dans la constitution de ta variable qu'il y avait le problème.
    Si dans la définition de ta variable tu n'utilises pas un attribut "select", c'est que tu définis un chaine de caractère (ou une autre valeur, voir un node-set). Du coup ta variable contenait une chaine de caractère et non un curseur xpath défini comme tel, un value-of renvoie simplement cette chaine. Une concaténation de chaine de caractère donnera toujours une chaine de caractère... Il existe peut etre un moyen de la convertir avec une instruction genre node-set (qui dans ton cas n'aurait effectivement servit à rien, elle sert entre autre à passer en parametre une ensemble d'éléments par exemple et en récupérer un curseur... voir la technique des treeview), mais je n'en connais pas. On est obligé de créer un xpath dynamique à partir d'un xpath depuis un "xsl:variable select" .


    Michael

Discussions similaires

  1. Requete Xpath dynamique dans un binding
    Par distil dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 22/01/2010, 17h26
  2. [xsl-fo]Problème de données dynamiques dans un tableau.
    Par Little_flower dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 21/05/2007, 10h35
  3. [XSLT][débutant] Problème xsl:value-of dans xsl:for-each
    Par Choubie dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 09/05/2007, 16h30
  4. Valeur dynamique dans le champ value des formulaires
    Par djalouk dans le forum Struts 1
    Réponses: 12
    Dernier message: 21/01/2007, 19h42
  5. [XSL] Comment créer un XPATH dynamique en XSL?
    Par oliviercuyp dans le forum XSL/XSLT/XPATH
    Réponses: 13
    Dernier message: 13/12/2006, 16h14

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