[xsl] grouping adjacent siblings

Subject: [xsl] grouping adjacent siblings
From: utah@xxxxxxxxxxxxxxx
Date: Thu, 3 May 2001 11:48:27 -0400 (EDT)
I am trying to transform the following...

<frag>
 <b>house</b>
 <a>door</a>
 <a>wall</a>
 <a>room</a>
 <b>barn</b>
 <a>hay</a>
 <a>cow</a>
 <a>poo</a>
</frag>

into...

<frag>
 <house>
  <a>door</a>
  <a>wall</a>
  <a>room</a>
 </house>
 <barn>
  <a>hay</a>
  <a>cow</a>
  <a>poo</a>
 </barn>
</frag>

using something to the effect of...

<xsl:template match="frag">
 <xsl:for-each select="b">
  <xsl:apply-templates/>
  <xsl:for-each
select="following-sibling::a[not(following-sibling:*[1][self::b)]">
   <xsl:apply-templates/>
  </xsl:for-each>
 </xsl:for-each>
</xsl:template>

which is a long way off...
I want to stick to defining the pattern within one template (preferably
within one XPath expression) for I have a lot of tricky nested nodes to
knock out and the source tree to get at this context node...
I've had some luck at grouping all following <<a>> siblings into their
respective <<b>> context node but have been unable to replicate this with
preceding nodes. If possible this woudl seem to be the simplest
solution...

1. select all following nodes
2. exclude all nodes preceding the context node

But this would require back-referencing the *current* context node..
right??
any ideas...

Utah Ingersoll
utah@xxxxxxxxxxxxxxx


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


Current Thread