RE: Re: [xsl] xsl:analyze-string explanation needed

Subject: RE: Re: [xsl] xsl:analyze-string explanation needed
From: cknell@xxxxxxxxxx
Date: Thu, 20 Jul 2006 10:36:36 -0400
OK, I got it. Here's the new version of the template for the thousands of readers who have been holding your collective breath.

<xsl:template name="extract-minutes-as-seconds">
  <xsl:param name="time" />
	<xsl:analyze-string select="$time" regex="([0-9]+) minute(s)?.*$">
		<xsl:matching-substring>
			<xsl:value-of select="60 * xs:integer(regex-group(1))" />
		</xsl:matching-substring>
		<xsl:non-matching-substring>0</xsl:non-matching-substring>
	</xsl:analyze-string>
</xsl:template>
-- 
Charles Knell
cknell@xxxxxxxxxx - email



-----Original Message-----
From:     David Carlisle <davidc@xxxxxxxxx>
Sent:     Thu, 20 Jul 2006 14:58:41 +0100
To:       xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject:  Re: [xsl] xsl:analyze-string explanation needed


> are you saying that I should change the regex so that it matches the
> entire input string rather than the part I'm interested in, 

yes
then there will only be one substring aafter the regex analysis, either
1 matching substring (the whole string) or one none matching substring.


<xsl:stylesheet version="2.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema";
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>


<xsl:template name="main">
  <xsl:for-each select="(
			'3 minutes 57 seconds',
			'3 minutes',
			'5 seconds',
			'rubbish')">

:<xsl:value-of select="."/>
:::    <xsl:analyze-string select="." regex="([0-9]+) minutes.*$">
      <xsl:matching-substring>
	<xsl:value-of select="60 * xs:integer(regex-group(1))" />
      </xsl:matching-substring>
      <xsl:non-matching-substring>0</xsl:non-matching-substring>
    </xsl:analyze-string>
    
  </xsl:for-each>
  
</xsl:template>

</xsl:stylesheet>




$ saxon8 -it main regex.xsl 
<?xml version="1.0" encoding="UTF-8"?>

:3 minutes 57 seconds
:::    180

:3 minutes
:::    180

:5 seconds
:::    0

:rubbish
:::    0

Current Thread