Re: [xsl] Splitting attributes

Subject: Re: [xsl] Splitting attributes
From: Oleg Tkachenko <olegt@xxxxxxxxxxxxx>
Date: Mon, 18 Nov 2002 09:10:44 +0200
Endre Magyari wrote:
In my source XML I have elements with IDREFS attributes, like:

<Class subtypes="id1 id23 id56 id34">

    My desire is to generate an element for each idref in part.(Split the
attribute to idrefs)

    Any idea how to do this? I haven't seen any splitting functions in the
XPATH documentation. Mostly, I would like  an <xsl:for-each>-like behaviour
to iterate on the set of the strings resulted from splitting the attribute
value.

You can make use substring-before($value, ' ') function recursively to get tokens. I'd better use standard templates either from exslt[1] or fxsl[2] libraries, but just to give you idea, here is a sample template:


<xsl:template match="Class">
<xsl:call-template name="tokenize">
<xsl:with-param name="str" select="normalize-space(@subtypes)"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="tokenize">
<xsl:param name="str"/>
<xsl:if test="string-length($str) > 0">
<token>
<xsl:choose>
<xsl:when test="contains($str, ' ')">
<xsl:value-of select="substring-before($str, ' ')"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$str"/>
</xsl:otherwise>
</xsl:choose>
</token>
<xsl:call-template name="tokenize">
<xsl:with-param name="str" select="normalize-space(substring-after($str, ' '))"/>
</xsl:call-template>
</xsl:if>
</xsl:template>


[1] http://www.exslt.org/str/functions/tokenize/index.html
[2] http://www.topxml.com/xsl/articles/dice/#res3
--
Oleg Tkachenko
eXperanto team
Multiconn Technologies, Israel


XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list



Current Thread