If you just want the text then the simplest approach would be to apply the widow-fix templates to just the text node children of the solution-headline
element rather than to the element itself:
<xsl:apply-templates select="solution-headline/text()" mode="widow-fix" />
If you always want the widow-fixing to give you just the text and not include the surrounding element, then delete the existing template
<xsl:template match="* | @*" mode="widow-fix">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="widow-fix"/>
</xsl:copy>
</xsl:template>
Now when you apply the widow-fix templates to solution-headline
it will use the default template which essentially just does <xsl:apply-templates mode="widow-fix" />
(i.e. process all child nodes using the same mode) without the copy
, and you'll get all the descendant text nodes processed by the widow-fixing template.