Output character references for all but one character

Subject: Output character references for all but one character
From: "Andrew Welch" <ajwelch@xxxxxxxxxxxxxxx>
Date: Mon, 21 Jun 2004 17:20:12 +0100
Consider the following xml:

<node value="£">Hello&#160;World</node>

I have the problem where I need characters outside the ascii range to be output as references, apart from the pound sign, which must remain as the actual character.

The processor is Saxon 7.8 and is fixed.  I can't use d-o-e as the pound sign is always an attribute value, and saxon 7.8 no longer supports d-o-e on attributes in favour of character maps.  When I use the following stylesheet, I get a '?' character instead of the the pound, I guess because Saxon can't output the pound sign because it's not in the ascii range...  

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
  xmlns:saxon="http://saxon.net.sf/";
  exclude-result-prefixes="saxon">

<xsl:output method="xhtml" encoding="ascii" omit-xml-declaration="yes" use-character-maps="style"/>

<xsl:character-map name="style">
  <xsl:output-character character="£" string="&#163;"/>
</xsl:character-map>

<xsl:template match="@*|node()">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

</xsl:stylesheet>

Outputs:

<node value="?">Hello&#160;World</node>

I'm really after an exact copy of the input: 

<node value="£">Hello&#160;World</node>

Any ideas?

cheers
andrew

Current Thread