xsl-list
[Top] [All Lists]

Output character references for all but one character

2004-06-21 09:20:12

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