This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: how to select nodes between nodes


Hi Mario,

> I use an xsl:for-each that selects <comma> Elements within a certain
> context. In this xsl:for-each I want to copy all  elements that come
> between this <comma> Element and the  next <comma> Element and so
> on.

It's unfortunately a little complicated in XSLT. One method is to
identify the following comma:

  <xsl:variable name="next-comma"
                select="following-sibling::comma[1]" />

And then identify all the following siblings of this comma that have
the $next-comma as a following sibling. You can work out whether an
element has $next-comma as a following sibling with:

  generate-id(following-sibling::comma[1]) = generate-id($next-comma)

So you can copy all the elements between this comma and the next with:

  <xsl:copy-of select="following-sibling::*
                         [generate-id(following-sibling::comma[1]) =
                          generate-id($next-comma)]" />

You can also achieve this grouping effect by stepping through the
following elements one by one with a recursive template. And as with
any grouping, you can use the Muenchian Method here - index all the
elements (aside from the comma elements) by their nearest preceding
comma element and use that. If you'd like me to explain either of
these techniques, let me know.


For interest, in XSLT 2.0, a solution would be:

  <xsl:for-each-group group-starting-with="comma">
    ...
    <xsl:copy-of select="current-group()[not(self::comma)]" />
    ...
  </xsl:for-each>

You could also use the $next-comma as above and then:

  <xsl:copy-of select="following-sibling::*[$next-comma >> .]" />

Or even, if you really felt like it:
  
  <xsl:copy-of select="following-sibling::*
                         [following-sibling::comma[1] == $next-comma]" />

Cheers,

Jeni

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


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]