Subject: [xsl] Finding sequences of same element From: Simon Kissane <skissane@xxxxxxxxx> Date: Wed, 9 Feb 2005 18:58:35 +1100 |
Hi Suppose I have an input document: <A><B X="1"/><B X="2"/><B X="3"/><C X="4"/><B X="5"/><B X="6"/><B X="7"/></A> Now, suppose I wish to group together consecutive B elements, giving a result document like this: <A><D><B X="1"/><B X="2"/><B X="3"/></D><C X="4"/><D><B X="5"/><B X="6"/><B X="7"/></D></A> How can I do this? (I would prefer not to use recursive templates, but rather for-each, if that is at all possible...) I think I can find the initial element of these sequences, like so: B[not(preceding-sibling::*) or preceding-sibling::*[0][not(self::B)]] This, I think, should select all B for which there are either no preceeding sibling elements, or for which the immediately preceeding sibling element is not a B element. Thus, in the above example, it would pick B[@X=1] and B[@X=5]. But, given each initial sequence element, how can I find the remaining nodes in the sequence? With the initial sequence element as the context node, I could do: .|following-sibling::B But that will also pick up B[@X=5] and B[@X=6] when the context node is B[@X=1]. Is there a predicate test I could use on following-sibling::B to restrict it only to the current sequence of B elements? Thanks Simon Kissane
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Generating table rows htm, Wendell Piez | Thread | Re: [xsl] Finding sequences of same, Mukul Gandhi |
Re: [xsl] How to apply different pa, Arun Sinha | Date | RE: [xsl] Can I use a boolean varia, Andrew Welch |
Month |