You can create a single space using
<xsl:text> </xsl:text>
or if you prefer greater visibility,
<xsl:text>#x20;</xsl:text>
Note that if you are generating HTML, multiple spaces in the HTML file will display as a single space in the browser.
You can create a non-breaking space using
#xa0; (or #160;)
This does not require an xsl:text element because it is not treated as whitespace by the XSLT processor.
If the non-breaking space displays incorrectly when you view the resulting HTML (either in a browser or in a text editor - you didn't say which) then this is because your configuration is set up incorrectly. It looks as if you have generated the HTML in UTF-8 encoding, and have then displayed it using software that thinks the encoding is iso-8859-1 or something similar (perhaps Microsoft cp1252).
One way to avoid such encoding problems is to specify <xsl:output encoding="us-ascii">. This will force a non-ASCII character such as NBSP to be output as a chararacter reference or entity reference.
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference