[xsl] Re: Replacing values

Subject: [xsl] Re: Replacing values
From: David Sinclair <dsinclair@xxxxxxxxxxxx>
Date: Tue, 31 Aug 2004 10:20:12 +0100
Sorry, ignore my last message - I realised that my problem was that I was selecting the whole language doc, not just the iso code.

I changed the value-of path to $languagesDoc/languages/language[current()=name]/iso-code and I now get what I expected.

Thanks,

David Sinclair.

David Sinclair wrote:

Hi,

I am a relative beginner, so forgive what is probably a very easy question but....

I am trying to write a stylesheet that will replace language descriptions with their iso 639 code. I have a doc containing the language codes of the form:

<languages>
<language>
  <name>English</name>
  <iso-code>en</iso-code>
</language>
  ...
  ...
</languages>

the source document contains <language> tags with text that matches the name tag in the language document. Here is my attempt:

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="languagesDocFilename"/>
<xsl:variable name="languagesDoc" select="document($languagesDocFilename)" />
<xsl:template match="language">
<language>
<xsl:value-of select="$languagesDoc/languages/language[current()=name]"/>
</language>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template> </xsl:stylesheet>


This almost works, but the output contains language tags like this:
...
<language>
de
German
</language>

when what I want is :

<language>
de
</language>

I guess this is because the template that matches on everything is copying the German text, but havent been able to find a way to get it to output only the iso code.

David Sinclair.

Current Thread