Variable et XPath

Variable et XPath - XML/XSL - Programmation

Marsh Posté le 10-08-2010 à 18:26:51    

Bonjour,

 

J'ai un problème à 2 balles que j'arrive pas à résoudre :

 

J'ai un XML dont des attributs sont en plusieurs langues, genre :

 
Code :
  1. <text>
  2. <en> Word </en>
  3. <fr> Mot </fr>
  4. </text>
 

Et qui sont dissiminés un peu partout dans l'arborescence de l'XML.

 

Pour éviter de me taper 2 fichiers XSL complètement différents, je veux juste définir une variable en haut du fichier genre :

 
Code :
  1. <xsl:variable name="language">en</xsl:variable>
 

Comme ça je crée 1 fichier par langue, contenant juste la déclaration de la variable + l'import du code "générique". Comme ça j'évite aussi de duppliquer trop de code.

 

Et ensuite faire appel à cette variable dans mes XPath, ce qui donne des trucs genre  :

 
Code :
  1. <xsl:value-of select="image/alt/$language"/>
 

Et là, bam je me prend l'interpreteur dans la gueule. Pourquoi?

 

P.S: Non je ne peux pas passer les valeur "en" et "fr" directement à l'interpreteur depuis un langage genre PHP/autre parce que les fichiers XML/XSLT sont rentrés dans une appli proprio qui ne le permet pas.

 

Merci


Message édité par esox_ch le 10-08-2010 à 18:28:21

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

Marsh Posté le 10-08-2010 à 18:26:51   

Reply

Marsh Posté le 11-08-2010 à 16:21:27    

Bon j'ai résolu le problème ... belle prise de tête quand même :D
 
Donc l'erreur venait du fait que j'essayais de mixer un node set (image/alt/) avec un string ($language).
 
Il ne faut PAS essayer de tout caster en String (ce que j'ai essayé de faire) :
 

Code :
  1. <xsl:value-of select="concat('image/alt/',$language)"/>


 
Cat dans ce cas, on obtient tout simplement le texte "image/alt/en", et non pas son contenu.
 
Ce qu'il faut faire, c'est justement réflechir en "node set" en non pas en essayant de bricoler des concaténations (qui ne servent pas à ça en XSL).
 
Donc ce qu'il faut faire c'est ça :
 
 

Code :
  1. <xsl:value-of select="image/alt/*[name()=$language]"/>


 
Pourquoi? image/alt/* signifie : Tous les enfants de image/alt. Ensuite, parmis ces enfants on selectionne ceux dont le nom est égal à notre variable.
 
Voilà :o


---------------
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