|
Subject: RE: [xsl] string question From: "Michael Kay" <mhkay@xxxxxxxxxxxx> Date: Wed, 21 Feb 2001 14:13:46 -0000 |
> >From this xml (those IP persons might recognize this):
> <b310>08/773,384</b310>
>
> I need:
> PR_08/773,384 PR_08 PR_773 PR_384
>
> Basically, all punctuation (and spaces) are "segment"
> delimiters. Starting
> with entire content, each segment is then prefixed with PR_.
For this sort of tokenizing you need to write recursive templates.
Something like:
<xsl:template match="b310">
<xsl:value-of select="concat('PR_', ., ' ')"/>
<xsl:call-template name="do-segments"/>
<xsl:with-param name="s" select="concat(normalize-space(
translate('/_:;,~', ' ')), ' ')"/>
</xsl:call-template>
</xsl:template>
<xsl:template name="do-segments">
<xsl:param name="s"/>
<xsl:if test="$s">
<xsl:value-of select="concat('PR_', substring-before(.,' '), ' ')"/>
<xsl:call-template name="do-segments"/>
<xsl:with-param name="s" select="substring-after(.,' ')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
What this does is first, to replace all delimiters by single spaces and add
a single trailing space. Then call a template that outputs the first token,
and calls itself to to process any remaining tokens, terminating when
supplied with an empty string.
If you're in a hurry, some processors have an extension function such as
saxon:tokenize().
Mike Kay
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] string question, David Santamauro | Thread | RE: [xsl] string question, David Santamauro |
| Re: [xsl] xsl example, by way of Mulberry T | Date | [xsl] forcing Line breaks, cedric trolez |
| Month |