RE: [xsl] normalize-space processing all nodes hack?

Subject: RE: [xsl] normalize-space processing all nodes hack?
From: Kolací Tomáš <kolaci@xxxxxxx>
Date: Fri, 2 Nov 2007 11:35:59 +0100
 Hi Abel!

 Thanks for answer (for both :))!

> XSLT 1.1 does not exist and never has existed (other than an early
> draft at w3c).

 OK, I'm not very strong in the knowledge of standards and things around, but
what I have meant is value of attribute version of xsl:stylesheet set to "1.1"
(<xsl:stylesheet version="1.1" ..>), up to now I thought it means XSLT 1.1,
but I can be easily wrong here.

> If you use Saxon 6.5, perhaps you can just as easily use Saxon 8.9,
> which implements XSLT 2.0.

 I don't think I can do it easily. I had some problems to simply switch to use
Saxon 8.9 instead of 6.5.x on my existing scripts (but I had not much time for
experiments, so I have gave up quickly). Anyway I know the (two-step)
solution, I was just curious..

 Thanks, Tomas

> -----Original Message-----
> From: Abel Braaksma [mailto:abel.online@xxxxxxxxx]
> Sent: Friday, November 02, 2007 10:53 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] normalize-space processing all nodes hack?
>
> Kolacm Toma9 wrote:
> > Oups, sorry guys, I have simplified my example too much :( In fact I
> need to apply some filtering rules on text() nodes (normalize-space(A)
> was there originally, but it has come out lately that some of text()
> nodes must be ignored). So, what I really need, is all text of A but
> excluding descendants of B, like:
> >
> > <xsl:variable name="textOnly"
> > select="normalize-space(A//text()[not(ancestor::B)])"/>
> >
> > So from <A>txt1<B>txt2<C>txt3</C></B><D>txt4</D></A> I need to get
> "txt1txt4".
> >
> > Is there some "one XPath expression" way now (XSLT 1.1 + Saxon 6.5.x
> extensions eventually)?
>
> XSLT 1.1 does not exist and never has existed (other than an early
> draft
> at w3c).
>
> If you use Saxon 6.5, perhaps you can just as easily use Saxon 8.9,
> which implements XSLT 2.0. Though it is beyond me why you want it in
> one
> expression without extra XSLT instructions, it is easiest in 2.0:
>
> normalize-space(string-join(A//text()[not(ancestor::B)], ''))
>
> in fact, you can do a whole lot more in 2.0 with one expression, like
> for..in with any sequence, do dissections, intersections,
> tokenization,
> regular expressions etc. Many things where you needed (complex)
> templates in 1.0 are single lines in 2.0
>
> I'm sorry I don't have a 1.0 solution for you (and I doubt anyone has
> a
> 1.1 solution, but that won't help, you use Saxon and that supports
> only
> 1.0 and 2.0 ;)
>
> HTH,
> Cheers,
> -- Abel Braaksma

Current Thread