One thing I see a problem with immediately - the <a> tag won't be included in the text for <field> - it's a nested tag. Aside form that, this is roughly what you need:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:apply-templates select="//field"/>
</xsl:template>
<!--
Template for a field element. Apply template for each of its text nodes.
-->
<xsl:template match="field">
<ul>
<xsl:apply-templates select="text()"/>
</ul>
</xsl:template>
<!--
Template for text() in a field element. Apply the line-splitting algorithm to the text
-->
<xsl:template match="/field/text()">
<xsl:call-template name="t">
<xsl:with-param name="s" select="."/>
</xsl:call-template>
</xsl:template>
<!--
Template t takes one string parameter s. It takes off the first line
then recurses, terminating when the input parameter is the empty string
-->
<xsl:template name="t">
<xsl:param name="s"/>
<!--
Is there any text to process?
-->
<xsl:if test="string-length($s)>0">
<!--
first = text before the first line break (or null if it's the last, unterminated line)
-->
<xsl:variable name="first" select="substring-before($s, '
')"/>
xsl:choose
<!--
Output first if it has content
-->
<xsl:when test="string-length($first)>0">
<li><xsl:value-of select="$first"/></li>
</xsl:when>
xsl:otherwise
<!--
Output the input string if it doesn't contain a line break
-->
<xsl:if test="substring($s,1,1)!='
'">
<li><xsl:value-of select="$s"/></li>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
<!--
Recurse, passing in the text after the first line break
-->
<xsl:call-template name="t">
<xsl:with-param name="s" select="substring-after($s, '
')"/>
</xsl:call-template>