You say the problem is with this...
<xsl:apply-templates select="." mode="html"/>
Indeed it is! You are using the mode attribute here, but there is no template present in your XSLT that has this mode specified. Of course, you might be showing a cut-down version of your XSLT, but assuming not, what will happen in this case is that when XSLT cannot find a template that matches, its built-in templates will be used, and these will ultimately output the text within the nodes.
Try adding this template to your XSLT
<xsl:template match="*" mode="html">
<xsl:copy-of select="." />
</xsl:template>
However, you might find when you do this, the output looks like this...
<p xmlns="http://www.w3.org/2005/Atom" class="NLMalsoCalled">Otros nombres...
This is because the elements within the summary node are part of the "http://www.w3.org/2005/Atom" namespace in the original feed. If you don't want the namespaces present, try these two templates instead
<xsl:template match="*" mode="html">
<xsl:element name="{local-name()}">
<xsl:apply-templates select="@*|node()" mode="html"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*" mode="html">
<xsl:copy-of select="." />
</xsl:template>
Do note that this line in your XSLT
<xsl:for-each select="atom:summary">
<xsl:apply-templates select="." mode="html"/>
</xsl:for-each>
Can be replaced with just this
<xsl:apply-templates select="atom:summary" mode="html"/>