RE: [xsl] outputting an ampersand in an attribute

Subject: RE: [xsl] outputting an ampersand in an attribute
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 6 Aug 2009 00:41:31 +0100
You can do it with character maps but you don't need to do anything as messy
as that. You want an attribute containing the Unicode character with code
point xE003 (= decimal 57347), so write

<xsl:attribute name="unicode" select="codepoints-to-string(57347)"/>

and let the serializer do its job of serializing it: that's what it's good
at.

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay



> -----Original Message-----
> From: tom a [mailto:tasmito@xxxxxxxxx]
> Sent: 05 August 2009 22:00
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] outputting an ampersand in an attribute
>
> I am generating svg documents and would like to output an
> element like:
>
> <glyph unicode="&#xE003;" horiz-adv-x="833"
> d="M124,348L124,249L709,249L709,348L124,348 Z"/>
>
> I need to generate the value of @unicode programmatically.
> The difficulty, of course, is outputting the ampersand in @unicode.
>
> I started off by trying to disable output escaping:
>
> <xsl:variable name="char" as="xs:string">
>   <xsl:value-of disable-output-escaping="yes"
>       select="concat(codepoints-to-string(38), position(), ';')"/>
>  </xsl:variable>
> <xsl:attribute name="unicode" select="$char"/>
>
> But this came out as &amp;
> (followed by an integer and ; per the concat())
>
> I then tried to use character maps:
>
> <xsl:character-map name="charmap">
>    <xsl:output-character string="&amp;" character="&"/>
> </xsl:character-map>
>
> But the processor refuses to accept the lone ampersand in
> @character. It generates the following message:
>
> "The entity name must immediately follow the '&' in the
> entity reference."
>
> But since the entity name is generated at runtime, I have a problem.
>
> Any thoughts are greatly appreciated...
>
> Tom

Current Thread