This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: XML to XML
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] XML to XML
- From: m dot vanrootseler at chello dot nl
- Date: Fri, 22 Jun 2001 13:07:05 +0200
- Reply-To: xsl-list at lists dot mulberrytech dot com
Thanks Rob, this is what I needed! You've just saved me a lot of work, so I
owe you a pint :-)
Mick
-----Oorspronkelijk bericht-----
Van: owner-xsl-list@lists.mulberrytech.com
[mailto:owner-xsl-list@lists.mulberrytech.com]Namens Rob Lugt
Verzonden: vrijdag 22 juni 2001 12:27
Aan: xsl-list@lists.mulberrytech.com
Onderwerp: Re: [xsl] XML to XML
> I want to convert the following XML:
>
> <line>One two. Testing.</line>
>
> into:
>
> <line><word>One</word> <word>two</word>. <word>Testing</word>.</line>
>
> Problem number two. I want to add an atribute to the <word> tag which
gives
> the position of the word in the line: <word wordID=" ">.
>
I think the easiest way to deal with this is to group all the characters
that you don't want a word to contain into a single character using
translate(). The result of this can be used for your tokenizing, but you
still use the original text when outputing the bits between the tokens.
It's a bit long-winded and I expect others could improve it, but this
template should do the trick:-
<xsl:template match="line">
<line>
<xsl:call-template name="test"/>
</line>
</xsl:template>
<xsl:template name="test">
<xsl:param name="text" select="."/>
<xsl:param name="count" select="1"/>
<xsl:variable name="x" select="translate($text, '.,', ' ')"/>
<xsl:choose>
<xsl:when test="contains($x, ' ')">
<xsl:variable name="word" select="substring-before($x, ' ')"/>
<xsl:variable name="wordlen" select="string-length($word)"/>
<xsl:if test="$wordlen">
<word wordID="{$count}"><xsl:value-of
select="$word"/></word>
</xsl:if>
<xsl:value-of select="substring($text, $wordlen+1, 1)"/>
<xsl:call-template name="test">
<xsl:with-param name="text" select="substring($text,
$wordlen+2)"/>
<xsl:with-param name="count"
select="$count+boolean($wordlen)"/>
</xsl:call-template>
</xsl:when>
<xsl:when test="$text">
<word wordID="{$count}">
<xsl:value-of select="$text"/>
</word>
</xsl:when>
</xsl:choose>
</xsl:template>
Hope this helps!
~Rob
--
Rob Lugt
ElCel Technology
http://www.elcel.com/
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list