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]

grouping adjacent siblings


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@digitalpulp.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]