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