Valeur d'une fonction

Valeur d'une fonction - XML/XSL - Programmation

Marsh Posté le 21-10-2006 à 18:44:13    

Bonjour, le problème est simple à expliquer. J'ai :
 
<xsl:value-of select="concat('../../items/item/',current()/name,'/value')"/>
 
Et au lieu d'obtenir la valeur du noeux value, j'obtiens le path (c'est à dire ../../items/item/idvalue dans le cas ou current/name = id)
 
Je ne comprend pas bien pourquoi, on dirait que value-of me retourne directement ce qui est retourné par concat, au lieu de le prendre comme un noeud.
 
Est-ce que qqn peut m'éclairer?
 
 
Merci beaucoup


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 21-10-2006 à 18:44:13   

Reply

Marsh Posté le 21-10-2006 à 18:46:30    

Ben ouais, tu sélectionnes un truc, mais dans le sélect tu fait un concat... Donc tu va récupérer le résultat du concat [:petrus75]
 
Il faut que le chemin soit un noeud. Là t'as une string (!)

Reply

Marsh Posté le 21-10-2006 à 19:05:25    

Oui j'avais bien imaginé, mais y a-t-il un moyen de le transformer en noeud afin de pouvoir apres recuperer sa valeur?
Mon probleme sans faire un concat, c'est que  
<xsl:value-of select="../../items/item/(current()/name)/value)"/>  
Est illegal ... J'ai aussi essayé en mettant current()/name dans une variable et après la mettre dans le string mais c'est aussi interdit.. Du coup je commance a secher :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 22-10-2006 à 10:43:00    

'tain ch'uis trop rouillé, ch'uis sûr y'a un moyen

Reply

Marsh Posté le 22-10-2006 à 10:47:27    

Idem :D Mais ça fait depuis hier soir je que lis de la doc sur xsl , xpath & co et j'ai toujours rien trouvé :/


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 22-10-2006 à 10:51:30    

Ah attend, j'me souvient d'un truc, style :

<xsl:template name="pouet">
  <xsl:param name="element" />
  <xsl:param name="tagada" />
  <xsl:value-of select="$element/../../items/item/$tagada/value" />
</xsl:template>


Et

<xsl:call-template name="pouet">
  <xsl:with-param name="element"><xsl:value-of select="current()" />
  <xsl:with-param name="tagada"><xsl:value-of select="current()/name" />
</xsl:call-template>


 
C'est un truc dans le genre...

Reply

Marsh Posté le 22-10-2006 à 10:56:48    

J'ai déjà essayé :( Quand je fais un :
<xsl:value-of select="../../items/item/$truc/name/value"/>
Mais ce con me pond un  
Error in expression ../../items/item/$truc/name/value: Unexpected token [$] in path expression


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 22-10-2006 à 10:58:14    

File-moi ton xml et ton xsl que j'essaye [:dawak]

Reply

Marsh Posté le 22-10-2006 à 11:06:49    

http://www.jeunesliberaux.ch/upload/tmp.xsl
http://www.jeunesliberaux.ch/upload/tmp.xml
 
Merci :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 22-10-2006 à 11:58:57    

[précision entre deux recherches]
 
T'as pas besoin de tout préfixer avec current(), genre :

Code :
  1. <xsl:if test="current()/type = 'password'">


Peut-être réécrit

Code :
  1. <xsl:if test="type = 'password'">

Reply

Marsh Posté le 22-10-2006 à 11:58:57   

Reply

Marsh Posté le 22-10-2006 à 12:05:20    

merci :)


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 22-10-2006 à 12:15:07    

Done !
 
Bon, va falloir un peu revoir ton XSL qui est un peu en bordel [:dawak]
 
 
Donc j'ai modifié là où t'as mis le <!-- ICI --> :

Code :
  1. <xsl:when test="current()/visibility ='text' and /page/@action != 'add' ">
  2.   <xsl:apply-templates select="." />
  3. </xsl:when>


J'ai fait une template en-dessous du coup :

Code :
  1. <xsl:template match="field">
  2.         <xsl:variable name="zeName" select="name" />
  3.         <xsl:value-of select="$zeName"/>:
  4.         <xsl:element name="input">
  5.             <xsl:attribute name="type">text</xsl:attribute>
  6.             <xsl:attribute name="name">
  7.                 <xsl:value-of select="$zeName"/>
  8.             </xsl:attribute>
  9.             <xsl:attribute name="value">
  10.             <xsl:value-of select="/page/body/form/items/item/*[name()=$zeName]" />
  11.             </xsl:attribute>
  12.             <xsl:attribute name="size">
  13.                 <xsl:value-of select="string-length(value)"/>
  14.             </xsl:attribute>
  15.         </xsl:element>
  16.     </xsl:template>


Et ouala [:dawak] J'ai bien 215 dans en valeur de id... Maintenant faut faire les autres, d'où une réorganisation nécessaire de ta XSLT.
 
Donc le truc, c'est qu'on peut pas mettre comme ça de variable dans un xpath. T'es obligé d'utiliser :

Code :
  1. *[name()=$name]

Reply

Marsh Posté le 22-10-2006 à 12:15:33    

Au passage si tu te fais chier : http://www.dpawson.co.uk/xsl/sect2/sect21.html

Reply

Marsh Posté le 22-10-2006 à 12:36:05    

Merci beaucoup Florent, je connaissais pas le coup du *[name()=$name]  :D
 
Je vais lire ton site web.
 
Encore merci


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed