Re: RE: Regular expression functions (Was: Re: [xsl] comments on December F&O draft)

Subject: Re: RE: Regular expression functions (Was: Re: [xsl] comments on December F&O draft)
From: michael.h.kay@xxxxxxxxxxxx
Date: Mon, 14 Jan 2002 18:12:24 +0000
Well, it obviously can't work quite as you describe because your example is valid XSLT 1.0 syntax and doesn't involve a regexp at all!

But certainly, the way I'm leaning from this discussion is towards some kind of model where you submit a string to decomposition by means of a regexp and the decomposed pieces are then supplied to some kind of XSLT template, one at a time, for subsequent processing.

Mike Kay
> 
> From: "Chris Bayes" <chris@xxxxxxxxxxx>
> Date: Mon, 14 Jan 2002 04:13:12 -0000
> To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx>
> Subject: RE: Regular expression functions (Was: Re: [xsl] comments on December F&O draft)
> 
> Hi,
> I've been a bit tied up with one thing and another (and I think you
> might have discussed this before) but aren't regex matches just
> predicates on text nodes ala
> <xsl:template match="text()['\(.*\)']">
> 	<x><xsl:apply-templates select=".[1]" /></x>
> </xsl:template>
> Which applies templates to whatever is not matched (child texts) (but
> which matches the template). So that template on a text node
> "(a(b(c)d)e)" (assuming greedy)would produce
> <x>
>   a 
>   <x>
>     b
>     <x>
>      c
>     </x>
>     d
>   </x>
>   e
> </x>
> Of course you could always stick it in a variable
> 
> <xsl:variable name="match-tree">
> 	<xsl:apply-templates select="'(a(b(c)d)e)'" />
> </xsl:variable>
> 
> Ok I'm thinking too tree like. What if "2002-01-01"
> 
> <xsl:template match="text()['(.*?)-(.*?)-(.*?)']">
> 	<year><xsl:apply-templates select=".[1]" /></year>
> 	<month><xsl:apply-templates select=".[2]" /></month>
> 	<day><xsl:apply-templates select=".[3]" /></day>
> </xsl:template>
> 
> Or "2002-01-Wednesday 2nd"
> 
> <xsl:template match="text()['(.*?)-(.*?)-(.*?)']">
> 	<year><xsl:apply-templates select=".[1]" /></year>
> 	<month><xsl:apply-templates select=".[2]" /></month>
> 	<xsl:apply-templates select=".[3]" />
> </xsl:template>
> <xsl:template match="text()['(.*?) (.*?)']">
> 	<day><xsl:apply-templates select=".[1]" /></day>
> 	<date><xsl:apply-templates select=".[2]" /></date>
> </xsl:template>
> 
> Or "2002-01-Wednesday 2nd"
> 
> <xsl:template match="text()['(.*?)-(.*?)-(.*?)']">
> 	<year><xsl:apply-templates select=".[1]" /></year>
> 	<month><xsl:apply-templates select=".[2]" /></month>
> 	<xsl:apply-templates select="concat('doh!', .[3])" />
> </xsl:template>
> <xsl:template match="text()['doh!(.*?) (.*?)']">
> 	<day><xsl:apply-templates select=".[1]" /></day>
> 	<date><xsl:apply-templates select=".[2]" /></date>
> </xsl:template>
> 
> Maybe it's rubbish but it doesn't look too alien to me. What other
> useful predicates can you put on a text node? Surely it isn't going to
> clash with anything. There are nearly 1000 pages of wd's to look at here
> so looking at it another way is there anything that says that . can't be
> a sequence and that I can't index into it with .[x]?
> 
> Ciao Chris
> 
> XML/XSL Portal
> http://www.bayes.co.uk/xml
> 
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 
> 


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread