xsl-list
[Top] [All Lists]

AW: struggling with <xsl:analyze-string>

2005-01-26 09:14:24

Ok, solved it.

<xsl:for-each select="part/section/par[(_at_)class='45_UeberschrPara' and 
contains(text(), 'In-Kraft-Treten')]/following::text()">
        <xsl:analyze-string select="." regex="\d{{1,2}}.+\d{{4}}">
                <xsl:matching-substring>
                        <xsl:call-template name="get.date">
                                <xsl:with-param name="text" select="." 
as="xs:string"/>
                        </xsl:call-template>
                </xsl:matching-substring>
        </xsl:analyze-string>
</xsl:for-each>

This code snippet does what I expected.
Would be nice to know if matches() would get me the same result...

wbr,
Roman
_______________________________________

Roman Huditsch
IT and Electronic Publishing
LexisNexis ARD Orac 
Marxergasse 25
1030 Vienna
Austria 
ph: +43-1-534 52-1514
f: +43-1-534 52-140
e-mail roman(_dot_)huditsch(_at_)lexisnexis(_dot_)at
www.lexisnexis.at
 

-----Ursprüngliche Nachricht-----
Von: David Carlisle [mailto:davidc(_at_)nag(_dot_)co(_dot_)uk] 
Gesendet: Mittwoch, 26. Januar 2005 16:22
An: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Betreff: Re: [xsl] struggling with <xsl:analyze-string>


I know that speed isn't so important if you are not getting 
the correct
  answer but:

  <xsl:for-each
  select="part/section//*[preceding::par[(_at_)class='45_UeberschrPara' and
  contains(., 'In-Kraft-Treten')]]"> 

maybe the optimiser will re-arrange that but on the face of 
it you have managed to combine two of the most expensive 
operations (// and
preceding::) and recursively call one from the other.
the above searches the whole document below part/section to 
arbitarary depth and then _for each_ found element searches 
back over the whole document for a par with that property. If 
your par are siblings which appears to be the case it's equivalent to


part/section/par[(_at_)class='45_UeberschrPara' and
  contains(., 'In-Kraft-Treten')]/following-sibling::*

I suppose that the curly bracetts are giving my troubles...
The regex attribute is an attribute value template so {} will 
be exeuted as an Xpath and the resulting string used in place 
of the AVT so the regex there is \d4 you need {{ }} to make a 
{} group as in any AVT.

It may be just because you have simplifed too much but it 
would look as if you don't need to use analyze-string here at 
all but just add [matches(.,'\d{4}')] to the select 
expression in your for-each.

David

______________________________________________________________
__________
This e-mail has been scanned for all viruses by Star. The 
service is powered by MessageLabs. For more information on a 
proactive anti-virus service working around the clock, around 
the globe, visit:
http://www.star.net.uk
______________________________________________________________
__________

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>