xsl-list
[Top] [All Lists]

Re: Yet Another Entity Ref question!

2002-12-20 01:19:32
Thanks Mike!!
However the problem is more general; suppose you have a content management
engine that takes as input an XML, applies an XSL and produces an HTML.
So an unknown user write an XML sheet (following a well-known grammar);
inside this sheet he/she can put an element like
     <entity>ent</entity>
where "ent" can be numberi (e.g. "#x0A") or symbolic (e.g. "agrave").
The engine should transform this element into the entity reference "&ent;"
(e.g. "&#x0A;" or "&agrave;"), through an XSL template like:

<xsl:template match="entity">
  <xsl:text
disable-output-escaping="yes"><![CDATA[&]]></xsl:text><xsl:value-of
select="." /><xsl:text>;</xsl:text>
</xsl:template>

the problem arises when I use the result of this template; if the result
is taken as-is, I will get the right thing ("&ent;"); if the result is
stored inside a variable I have to disable-output-escaping when using
xsl:value-of. For example

XML
...
<doc>
  <label>Foobar<entity>ent</entity></label>
</doc>

XSL:
...
<xsl:template match="doc">
   <xsl:apply-templates select="label" /> <!-- ok! -->
   <xsl:variable name="label">
      <xsl:apply-templates select="label" />
   </xsl:variable>
   <xsl:value-of select="$label" />  <!-- not ok -->
   <xsl:value-of disable-output-escaping="yes" select="$label" />  <!-- ok
-->
</xsl:template>
...

So I can't substitute the value of the entity with the related UNICODE
representation because I don't know that entity.
Any idea?
Thanks so much!!

On Thu, 19 Dec 2002, Mike Brown wrote:

Marco Guazzone wrote:
I'd like to produce an entity reference, say "&copy;", from XML to HTML
through XSLT;

Put Unicode character #169 (the copyright symbol) in your stylesheet
with &#169; or &#xA9;

Change your output encoding to us-ascii to ensure that the XSLT processor
won't emit that character directly encoded. ASCII does not have a copyright 
symbol, so the processor will emit a numeric character reference like &#169; 
or an entity reference like &copy.

You won't be able to control whether the processor emits &#169; or
&copy;, but I believe most XSLT processors try to emit entity refs when
the character falls in the latin-1 range and isn't able to be expressed
directly in the given encoding.

Mike

-- 
  Mike J. Brown   |  http://skew.org/~mike/resume/
  Denver, CO, USA |  http://skew.org/xml/

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



--------------------------------
Marco Guazzone   
Software Engineer
Kerbero S.r.L. - Gruppo TC
Viale Forlanini, 36 
Garbagnate M.se (MI)
20024 - Italy
mail: marco(_dot_)guazzone(_at_)kerbero(_dot_)com
www: http://www.kerbero.com
Tel. +39 02 99514.247
Fax. +39 02 99514.399
--------------------------------



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>