Creo que no entendí lo que te pasa realmente

(es lunes, jeje) porque he creado un pequeño ejemplo y no me pasa los espacios en blanco del valor de un atributo a saltos de linea.
El ejemplo que creé fue el siguiente:
mundo.xml:
Código PHP:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="C:\Documents and Settings\encarretero\Escritorio\mundo.xsl"?>
<greeting saludo="Hola Mundo"/>
mundo.xsl:
Código PHP:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- <xsl:strip-space elements="*" /> -->
<!-- <xsl:preserve-space elements="*" /> -->
<xsl:template match="/">
<html>
<body>
<xsl:for-each select="greeting">
<p>
<xsl:value-of select="@saludo" />
</p>
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
A mi me mantiene perfectamente el espacio en blanco que existe en el atributo saludo incluso sin utilizar <xsl:preserve-space /> eso es porque según he leído en
el manual de w3schools es la opción por defecto.
Pero voy más allá, si uso <xsl:strip-space /> también me mantiene correctamente los espacios.

Fíjate en la nota del enlace que te pongo de w3schools. Dice que <xsl:preserve-space /> y <xsl:strip-space /> deben ser elementos de primer nivel en el archivo xsl.

Fíjate también que el
* hace referencia a todos los elementos de tu archivo XML.