xsl-list
[Top] [All Lists]

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

2007-11-02 02:54:52
Kolací Tomáš 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

--~------------------------------------------------------------------
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>
--~--