Altova Mailing List Archives
>xsl-list Archive Home
>Thread Prev - Re: [xsl] normalize-space processing all nodes hack?
>Thread Next - Re: [xsl] normalize-space processing all nodes hack?
RE: [xsl] normalize-space processing all nodes hack?
Date: 11/2/2007 10:37:00 AM
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