xsl-list
[Top] [All Lists]

Re: number continuation problem

2003-06-30 09:50:02
Hi Andrew,

A new twist is that there can be many <elseif>'s to an <if>
(naturally enough), so the data can take the form:

<if/>
<elseif/>
<elseif/>
<elseif/>
<if/>
<elseif/>

Is there a neat trick of getting all following-siblings while they
are of a certain name (as if they are processed linearly).

In XSLT 1.0, use a key: index all the <elseif> elements by their
immediately preceding <if> element:

<xsl:key name="elseifs" match="elseif"
         use="generate-id(preceding-sibling::if[1])" />

Then, when on an <if> element, you can get all the related <elseif>
elements with:

  key('elseifs', generate-id(.))

Or you can just do it with:

  following-sibling::elseif[generate-id(preceding-sibling::if[1]) =
                            generate-id(current())]

Or you can step through them one-by-one recursively.
                            
Note that your solution:

  following-sibling::elseif[not(preceding-sibling::if[2])]

collects together all the <elseif> elements that have 0 or 1 preceding
sibling <if> elements. So, for example, if you're on the second <if>
of the example above, it won't select the following <elseif> because
it does have a second preceding sibling <if> element.

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



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