Subject: RE: [xsl] Function to Extract integer from string From: "Philip Vallone" <philip.vallone@xxxxxxxxxxx> Date: Tue, 24 Oct 2006 09:21:21 -0400 |
David and Andrew, With both of your suggestions it works perfect. BTW, what does "'regex="\d+\.?\d*"' do? I combined them as follows: <xsl:for-each-group select="//Title" group-by="."> <xsl:if test="contains(., ''')"> <xsl:variable name="all" select="replace(.,'[^ 0-9\.]','')"/> <xsl:variable name="numbers" as="xs:string*"> <xsl:analyze-string select="$all" regex="\d+\.?\d*"> <xsl:matching-substring> <xsl:sequence select="."/> </xsl:matching-substring> </xsl:analyze-string> </xsl:variable> <xsl:for-each-group select="$numbers" group-by="."> <xsl:sort select="current-grouping-key()"/> <xsl:sequence select="."/> <p/> </xsl:for-each-group> </xsl:if> </xsl:for-each-group> Which produces the desired results: 21.197 21.197 21.199 91.407 121.133 Thanks, again. Now I'll figure out how to group them. Phil -----Original Message----- From: Andrew Welch [mailto:andrew.j.welch@xxxxxxxxx] Sent: Tuesday, October 24, 2006 8:24 AM To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Subject: Re: [xsl] Function to Extract integer from string On 10/24/06, Philip Vallone <philip.vallone@xxxxxxxxxxx> wrote: > Hello Everyone, > > I have numerous xml documents that have content that refers to US code of > Federal Regulations (CFRs) e.g. > > 'GENERAL ['21.197]' or 'PERMIT ['21.197 & '21.199]' > > Is there a simple string function that extracts integers from a string? > > I am trying to use a series of functions to do the same. e.g. > > <xsl:for-each-group select="//Title" group-by="."> > <xsl:if test="contains(., ''')"> > <xsl:variable name="before" > select="substring-after(.,'[')"/> > <xsl:variable name="after" > select="substring-before($before,']')"/> > <xsl:variable name="removespace" select="tokenize($after, > '&')"/> > <xsl:value-of select="$removespace"/> > p/> > </xsl:if> > </xsl:for-each-group> > > Which produces: > > '21.197 > '21.197 '21.199 > > Desired result: > > 21.197 > 21.197 > 21.199 > > I will eventually group and sort by number. How about: <xsl:variable name="numbers" as="xs:string*"> <xsl:analyze-string select="//Title" regex="\d+\.?\d*"> <xsl:matching-substring> <xsl:sequence select="."/> </xsl:matching-substring> </xsl:analyze-string> </xsl:variable> <xsl:for-each-group select="$numbers" group-by="."> <xsl:sort select="current-grouping-key()"/> <xsl:sequence select="."/> </xsl:for-each-group> You might want to tight up the regex a little to not allow "2." for example... cheers andrew
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Function to Extract integ, Andrew Welch | Thread | [xsl] Camel case tokenizing, tom tom |
[xsl] Free International Money Tran, Over Stock | Date | [xsl] Camel case tokenizing, tom tom |
Month |