[XSLT] How to add a non-breaking space to HTML output?

Okay, simple problem. I have an XML file linked to an XSL file. The XML file will be opened in Internet Explorer 6 and this shoudl result in a client-side transformation of a small data file with a small transformation file into what would be a very large HTML page. The HTML output is quite big because of the use of colors, tables and lots of formatted fields. And because the internet connection and server are a bit slow while the clients are pretty fast, I need this client-side transformation. Fortunately, IE does this automatically.
However, there will also be some users who need the XML file to be translated server-side because they use either a different webbrowser or an older webbrowser that doesn't support XML. These users might not even have any Unicode support on their system.

However, my problem is that I need   tags in the HTML output too. If I just use   then IE will not transform my XML file but just report an error. I tried to use   but IE then generates   instead of the required blank space. I could use   and this seems to give the correct result but it's still not exactly what I need.
Sure, the HTML output will convert   to a NBSP but it generates it as a unicode character and not as the   tag. I can't allow the NBSP to be hardcoded in the output as an Unicode character because some people would just see ' ' in their output. Yes, a funny A followed by a space... So, for those users who need the pre-translated file I need to have   in my output file.

Now, how to do this with XSLT??? How to keep unicode out of my output file?
LVL 17
Wim ten BrinkSelf-employed developerAsked:
Who is Participating?
sparkplugConnect With a Mentor Commented:

Make sure you have <xsl:output method="html"/> at the top of your XSLT (under the <xsl:stylesheet>) tag. You can then use &#160; or &#xA0; and these will be translated to &nbsp;

Alternatively you can use &nbsp; in your XSLT after putting <!DOCTYPE xsl:stylesheet [<!ENTITY nbsp "&#160;">]> at the top of the file.

Another less elegant solution would be to use <xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text> or <xsl:text disable-output-escaping="yes">&amp;#160;</xsl:text>.

For more info and explanations see this FAQ: http://www.dpawson.co.uk/xsl/sect2/nbsp.html

Hope this helps,

the xml for non-breaking space is  &#160;
i have never seen the problem as you describe. but you use "&#0160;" maybe that makes the difference?
Wim ten BrinkSelf-employed developerAuthor Commented:
The problem is quite simple, actually. I can't generate the &nnbsp; tag in any way by using XSLT... IE hates it when I use &nbsp; in my xslt file since it considers it an illegal tag. And according to the XML standard IE is right too. &nbsp; is not allowed. But I want either &nbsp; or &30160; to be generated in my output, instead of the NBSP character. And that's my problem.
It is fun, btw. If I use &amp; then the output will contain &amp; instead of &. But when I use &nbsp; the translator fails. In other words, it's not translated correctly. It just happens to be okay when the webbrowser can handle unicode characters...
Wim ten BrinkSelf-employed developerAuthor Commented:
I have to admit, <xsl:text disable-output-escaping="yes">&amp;nbsp;</xsl:text> isn't pretty but does the trick quite well. :) Thanks.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.