|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: string question
> >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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








