Rechercher : dans
Par :

[XSLT] fonction document() avec parametre

Dernière réponse le 5 avr 2009 à 23:51:40 djedy, le 5 avr 2009 à 19:32:53 
 Signaler ce message aux modérateurs

Bonjour,
j'ai crée plusieurs fichiers xml ayant tous le meme format et contenants les jours de la semaine chacun en une langue.
Ex: french.xml
<days>
<day>lundi</day>
<day>mardi</day>
<day>mercredi</day>
.
.
</days>
J'ai également un autre fichier XML auquel je souhaite appliquer une transformation XSLT et produire en sortie du HTML.
Dans mon fichier XSLT j'aimerais pouvoir faire référence aux fichiers externes XML contenant les jours de la semaine de la maniere suivante:

1.<xsl:variable name="lang_file"/>
2.<xsl:if test="$lang='fr'"><!--lang est un parmetre de mon template xsl-->
3.$lang_file="french.xml"
4.</xsl:if>
5.<td><xsl:value-of select="document($lang_file)/days/day[1]"/></td>

J'ai un problème à la 3eme ligne car je ne sais pas comment l'inclure dans une balise xsl et si meme cette opération est possible en XSLT bien evidement je voudrais eviter de créer une nouvelle variable pour chaque fichier de langue,c'est a dire eviter d'ecrire:
<xsl:variable name="lang_file_fr" select="'french.xml'"/>
<xsl:variable name="lang_file_en" select="'english.xml'"/>
.
.etc...

Et si meme je fais cela,je rencontre un autre problème a la ligne 5, il me semble que la fonction document() ne puisse pas prendre en parametre un variable.La documentation signale que le parametre doit etre une URI(ref: http://www.w3schools.com/Xsl/func_document.asp).

Comment puis je résoudre ces deux problèmes?Existe t-il une autre méthode(plus simple peut etre) pour effectuer la tache désirée?
Merci pour votre assistance.

Configuration: Windows XP
Safari 525.19

Meilleures réponses pour « [XSLT] fonction document() avec parametre » dans :
Paramètres GPRS VoirSi vous possédez un téléphone mobile fonctionnant sous Windows Mobile (smartphone du type HTC, Qtek, etc.), voici les paramètres GPRS pour les trois principaux opérateurs français Orange Orange GSM Orange GPRS Orange MMS Orange...
[Programmation] Conventions de passage de paramètres sous x86 VoirLes conventions de passage de paramètres sous x86 Introduction Cdecl Stdcall Fastcall Register Pascal Sources de ce document et liens Lorsqu'un programme est compilé pour une architecture x86, le passage de paramètres pour...
[VBA] Fonction NB.SI_Plus VoirFonction NB.SI_Plus sans limitation Cette fonction "Plus" permet d'appliquer la fonction NB.SI sans que l'on soit limité au nombre de paramètres imposés par Excel. Introduction Le classeur Dans un module général Télécharger le...
PHP - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Sécurité - Les cookies VoirIntroduction aux cookies Quels sont ces étranges gateaux qu'un site web vous a sûrement déjà proposé? La plupart du temps, lorsqu'un serveur web propose un cookie, les utilisateurs ignorent ce terme et cliquent sur « OK » sans se préoccuper de...

1

 djedy, le 5 avr 2009 à 23:51:40

--Problème résolu--
L'astuce a été de renommer les fichier de langue de la facon suivante:
- lang_fr.xml
- lang_it.xml
- lang_en.xml
etc...
et faire tout simplement : <xsl:value-of select="document(concat('lang_', $lang, '.xml'))/days/day[1]"/>.

NB: pour utiliser la variable $lang_file comme parametre, voici une possible solution:

<xsl:variable name="lang_file">
<xsl:choose>
<xsl:when test="$lang = 'fr'">
<xsl:text>french.xml</xsl:text>
</xsl:when>
<xsl:when test="$lang = 'it'">
<xsl:text>italiano.xml</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>english.xml</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>

ensuite il suffit d'ecrire: <xsl:value-of select="document($lang_file)/days/day[1]"/>

Répondre à djedy