Это преобразование (в обеих версиях XSLT):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:decimal-format
name="Cz1"
grouping-separator=" "
decimal-separator="_"/>
<xsl:decimal-format
name="Cz2"
grouping-separator=" "
decimal-separator=","/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="price/text()">
<xsl:value-of select="format-number(., '# ##0,00', 'Cz2')"/>
</xsl:template>
<xsl:template match="price/text()[. = floor(.)]" priority="3">
<xsl:value-of select="format-number(., '# ##0', 'Cz1')"/>
<xsl:text>,-</xsl:text>
</xsl:template>
</xsl:stylesheet>
при применении к предоставленному документу XML :
<prices>
<price>1234</price>
<price>1234.5</price>
</prices>
дает желаемый, правильный результат :
<prices>
<price>1 234,-</price>
<price>1 234,50</price>
</prices>