Using an HTML entity in XSLT (e.g.  )

Xslt

Xslt Problem Overview


What is the best way to include an html entity in XSLT?

<xsl:template match="/a/node">
    <xsl:value-of select="."/>
    <xsl:text>&nbsp;</xsl:text>
</xsl:template>

this one returns a XsltParseError

Xslt Solutions


Solution 1 - Xslt

You can use CDATA section

<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>

or you can describe   in local DTD:

<!DOCTYPE xsl:stylesheet [ <!ENTITY nbsp "&#160;"> ]>

or just use &#160; instead of &nbsp;

Solution 2 - Xslt

It is also possible to extend the approach from 2nd part of aku's answer and get all known character references available, like this:

<!DOCTYPE stylesheet [
  <!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
      "http://www.w3.org/2003/entities/2007/w3centities-f.ent">
  %w3centities-f;
]>
...
<xsl:text>&nbsp;&minus;30&deg;</xsl:text>

There is certain difference in the result as compared to <xsl:text disable-output-escaping="yes"> approach. The latter one is going to produce string literals like &nbsp; for all kinds of output, even for <xsl:output method="text">, and this may happen to be different from what you might wish... On the contrary, getting entities defined for XSLT template via <!DOCTYPE ... <!ENTITY ... will always produce output consistent with your xsl:output settings.

It may be wise then to use a local entity resolver to keep the XSLT engine from fetching character entity definitions from the Internet. JAXP or explicit Xalan-J users may need a patch for Xalan-J to use the resolver correctly. See my blog http://s-n-ushakov.blogspot.com/2011/09/xslt-entities-java-xalan.html">XSLT, entities, Java, Xalan... for patch download and comments.

Solution 3 - Xslt

one other possibility to use html entities from within xslt is the following one:

<xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text>

Solution 4 - Xslt

> this one returns a XsltParseError

Yes, and the reason for that is that &nbsp; is not a predefined entity in XML or XSLT as it is in HTML.

You could just use the unicode character which &nbsp; stands for: &#160;

Solution 5 - Xslt

XSLT only handles the five basic entities by default: lt, gt, apos, quot, and amp. All others need to be defined as @Aku mentions.

Solution 6 - Xslt

Now that there's Unicode, it's generally counter-productive to use named character entities. I would recommend using the Unicode character for a non-breaking space instead of an entity, just for that reason. Alternatively, you could use the entity &#160;, instead of the named entity. Using named entities makes your XML dependent on an inline or external DTD.

Solution 7 - Xslt

I found all of these solutions produced a  character in the blank space.

Using <xsl:text> </xsl:text> solved the problem for me; but <xsl:text>#x20;</xsl:text> might work as well.

Solution 8 - Xslt

Thank you for your information. I have written a short blog post based on what worked for me as I was doing XSLT transformation in a template of the Dynamicweb CMS.

The blog post is here: How to add entities to XSLT templates.

/Sten Hougaard

Solution 9 - Xslt

It is necessary to use the entity #x160;

Solution 10 - Xslt

I had no luck with the DOCTYPE approach from Aku.

What worked for me in MSXML transforms on an Windows 2003 server, was

	<xsl:text disable-output-escaping="yes">&amp;#160;</xsl:text>

Sort of a hybrid of the above. Thanks Stackoverflow contributors!

Solution 11 - Xslt

One space character between text tags should be enough.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPierre SpringView Question on Stackoverflow
Solution 1 - XsltakuView Answer on Stackoverflow
Solution 2 - XsltSergey UshakovView Answer on Stackoverflow
Solution 3 - XsltPierre SpringView Answer on Stackoverflow
Solution 4 - XsltTom LokhorstView Answer on Stackoverflow
Solution 5 - XsltsamjudsonView Answer on Stackoverflow
Solution 6 - XsltJames SulakView Answer on Stackoverflow
Solution 7 - XsltSixOThreeView Answer on Stackoverflow
Solution 8 - XsltNetsi1964View Answer on Stackoverflow
Solution 9 - XsltЕвгений РаткевичView Answer on Stackoverflow
Solution 10 - XsltDaveView Answer on Stackoverflow
Solution 11 - XsltAyça DenizView Answer on Stackoverflow