Here is an approach that uses a recursive template, which looks for 
 in the string from the database and then outputs the substring before.
If there is a substring after 
 remaining, then the template calls itself until there is nothing left.
In case 
 is not present then the text is simply output.
Here is the template call (just replace @ActivityExtDescription with your database field):
<xsl:call-template name="MultilineTextOutput">
    <xsl:with-param name="text" select="@ActivityExtDescription" />
</xsl:call-template>
and here is the code for the template itself:
<xsl:template name="MultilineTextOutput">
<xsl:param name="text"/>
<xsl:choose>
    <xsl:when test="contains($text, '
')">
        <xsl:variable name="text-before-first-break">
            <xsl:value-of select="substring-before($text, '
')" />
        </xsl:variable>
        <xsl:variable name="text-after-first-break">
            <xsl:value-of select="substring-after($text, '
')" />
        </xsl:variable>
        <xsl:if test="not($text-before-first-break = '')">
            <xsl:value-of select="$text-before-first-break" /><br />
        </xsl:if>
        <xsl:if test="not($text-after-first-break = '')">
            <xsl:call-template name="MultilineTextOutput">
                <xsl:with-param name="text" select="$text-after-first-break" />
            </xsl:call-template>
        </xsl:if>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="$text" /><br />
    </xsl:otherwise>
</xsl:choose>
Works like a charm!!!