Question

Using the solution from XSL: Is there an easy way to prevent widows? makes odd tags in the DOM.

Is there a way to make it not insert an element of the name? Currently if I run

<xsl:apply-templates select="solution-headline" mode="widow-fix" /> 

it will insert

<solution-headline>Lorem ipsum<solution-headline/> 

I want it to insert

<xsl:text>Lorem ipsum<xsl:text/>
Was it helpful?

Solution

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top