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 :
Javascript - Les fonctions Voir La 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. Cette notion de sous-programme est généralement appelée fonction...
GMail - Compatibilité avec les clients de messagerie VoirC'est quoi, GMail ? GMail (Google mail) est un webmail, c'est à dire une boîte mail que l'on peut consulter avec un simple navigateur, tout comme Hotmail, Caramail ou Yahoo! Mail. Pourquoi GMail ? GMail a été créé par Google. Il a divers...
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
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...
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...
Tableur - Les fonctions mathématiques VoirLes fonctions standards Méthode description ABS() Cette méthode renvoie la valeur absolue d'un nombre, il renvoie donc le nombre s'il est positif, son opposé (positif) s'il est négatif IMPAIR(valeur) Cette méthode renvoie la valeur...
Langage C++ - Les pointeurs VoirComme en langage C, le langage C++ permet d'utiliser des pointeurs pour manipuler des données, mais il introduit aussi le concept de référence, très pratique pour permettre la modification d'une donnée passée en paramètre d'une fonction. Définition...

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