Subject: [xsl] Modifying a variable while merging 2 XMLs documents !? From: Jérôme Haguet <j.haguet@xxxxxxxxxx> Date: Thu, 16 Mar 2006 16:53:56 +0100 |
Hello Here is the context : - I have one XML document which contains my software messages, translated in several languages. - I have one XML glosary with the translated messages for english, french and a new supported language (nl) - I want to includes in the first document the new available translation The basic criteria is : If english and french messages match, than insert the dutch translation. The point is that in the glossary, some terms are repeated (cf. "CrC)er/Create") So, once I have found one matching item to copy, I do not want to insert a 2nd translation. For that, I used a variable which I change once I copy. But it does not work ... What is the mistake I made ? Is the a more consise way to do that work (no variable for value_fr and value_en) ? Thank you in advance JC)rC4me My software messages : <STR-Dictionary name="dic000-dial"> <entry name="Dic_Create"> <value xml:lang="fr">CrC)er</value> <value xml:lang="en">Create</value> <value xml:lang="es">Crear</value> <value xml:lang="pt">Criar</value> <value xml:lang="it">Crea</value> <value xml:lang="ja">C$B=EC&KB</value> <value xml:lang="de">Neu</value> <value xml:lang="zh-TW">C%B;B:C'B+b9</value> <value xml:lang="zh-CN">C%B;B:C'B+b9</value> </entry> <entry name="Dic_Rename"> <value xml:lang="fr">Renommer</value> <value xml:lang="en">Rename</value> <value xml:lang="es">Renombrar</value> <value xml:lang="pt">Renomear</value> <value xml:lang="it">Rinomina</value> <value xml:lang="ja">C%BB C%b0B $,2>NC%B$b0C&b:B4(B</value> <value xml:lang="de">Umbenennen</value> <value xml:lang="zh-TW">C&b:B4C%BB </value> <value xml:lang="zh-CN">C&b:B4C%BB </value> </entry> </STR-Dictionary> The translated glossary : <glossary> <entry name='ID_2'> <value xml:lang='fr'>CrC)er</value> <value xml:lang='en'>Create</value> <value xml:lang='nl'>Aanmaken</value> </entry> <entry name='ID_3'> <value xml:lang='fr'>Supprimer</value> <value xml:lang='en'>Delete</value> <value xml:lang='nl'>Verwijderen</value> </entry> <entry name='ID_6'> <value xml:lang='fr'>Renommer</value> <value xml:lang='en'>Rename</value> <value xml:lang='nl'>Hernoemen</value> </entry> <entry name='ID_8'> <value xml:lang='fr'>Ouvrir</value> <value xml:lang='en'>Open</value> <value xml:lang='nl'>Openen</value> </entry> <entry name='ID_941'> <value xml:lang='fr'>CrC)er</value> <value xml:lang='en'>Create</value> <value xml:lang='nl'>Aanmaken</value> </entry> </glossary> My XSL Transformation : <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- identity template --> <xsl:import href="copie.xslt"/> <xsl:output method="xml" encoding="utf-8" indent="yes"/> <xsl:variable name="doc2" select="document('glossaryNL.xml')"/> <xsl:template match="entry"> <xsl:variable name="value_fr" select="current()/value[@xml:lang='fr']"/> <xsl:variable name="value_en" select="current()/value[@xml:lang='en']"/> <xsl:variable name="value_nl" select="current()/value[@xml:lang='nl']"/> <xsl:variable name="no_value_nl" select="string-length ($value_nl) < 1"/> <xsl:copy> <!-- Copy existing stuff .. --> <xsl:apply-templates select="@*|node()"/> <xsl:for-each select="$doc2/*/*"> <!-- If 'fr' and 'en' text elements match ... --> <xsl:if test=" ./value[@xml:lang='fr'] = $value_fr and ./value[@xml:lang='en'] = $value_en"> <xsl:if test="$no_value_nl"> <!-- If no translation yet, append it ..--> <xsl:copy-of select="./value[@xml:lang='nl']"/> <xsl:variable name="no_value_nl" select="false"/> </xsl:if> </xsl:if> </xsl:for-each> </xsl:copy> </xsl:template> </xsl:stylesheet> The result I get : <STR-Dictionary name="dic000-dial"> <entry name="Dic_Create"> <value xml:lang="fr">CrC)er</value> <value xml:lang="en">Create</value> <value xml:lang="es">Crear</value> <value xml:lang="pt">Criar</value> <value xml:lang="it">Crea</value> <value xml:lang="ja">C$B=EC&KB</value> <value xml:lang="de">Neu</value> <value xml:lang="zh-TW">C%B;B:C'B+b9</value> <value xml:lang="zh-CN">C%B;B:C'B+b9</value> <value xml:lang="nl">Aanmaken</value> <value xml:lang="nl">Aanmaken</value> </entry> <entry name="Dic_Rename"> <value xml:lang="fr">Renommer</value> <value xml:lang="en">Rename</value> <value xml:lang="es">Renombrar</value> <value xml:lang="pt">Renomear</value> <value xml:lang="it">Rinomina</value> <value xml:lang="ja">C%BB C%b0B $,2>NC%B$b0C&b:B4(B</value> <value xml:lang="de">Umbenennen</value> <value xml:lang="zh-TW">C&b:B4C%BB </value> <value xml:lang="zh-CN">C&b:B4C%BB </value> <value xml:lang="nl">Hernoemen</value> </entry> </STR-Dictionary>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: RE: [xsl]: XSL processes XML i, Cave, Neil | Thread | Re: [xsl] Modifying a variable whil, David Carlisle |
Re: Re: [xsl] Complex expression, Oleg Konovalov | Date | RE: [xsl] Modifying a variable whil, cknell |
Month |