nl2elements
Easily wrap each line with a custom element
Description
Wraps each line in a custom element.
Thanks to the nl2br Utility for inspiration!
Two params:
string The string to convert.
element-name (optional, default ‘li’) The element name
Example:
<ul>
<xsl:call-template name="nl2elements">
<xsl:with-param name="string">
Line 1
Line 2
</xsl:with-param>
<xsl:with-param name="element-name" select="'li'" />
</xsl:call-template>
</ul>
Output:
<ul>
<li>Line 1</li>
<li>Line 2</li>
</ul>
XSLT
View Raw
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <!-- Example: <xsl:call-template name="nl2elements"> <xsl:with-param name="string" select="body" /> <xsl:with-param name="element" select="'li'" /> </xsl:call-template> --> <xsl:template name="nl2elements"> <xsl:param name="string" /> <xsl:param name="element-name">li</xsl:param> <xsl:if test="normalize-space(substring-before($string,' ')) != ''"> <xsl:element name="{$element-name}"> <xsl:value-of select="substring-before($string,' ')" /> </xsl:element> </xsl:if> <xsl:choose> <xsl:when test="contains(substring-after($string,' '),' ')"> <xsl:call-template name="nl2elements"> <xsl:with-param name="string" select="substring-after($string,' ')" /> <xsl:with-param name="element-name" select="$element-name" /> </xsl:call-template> </xsl:when> <xsl:otherwise> <xsl:element name="{$element-name}"> <xsl:value-of select="substring-after($string,' ')" /> </xsl:element> </xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>