xsl-list
[Top] [All Lists]

RE: Grouping of Tags

2003-06-21 03:38:28
Hi.

-----Original Message-----
From: owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com 
[mailto:owner-xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com] On Behalf Of 
Marc Baumgartner
Sent: Friday, June 20, 2003 12:53 PM
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] Grouping of Tags


Hello Everybody,

I have got a little problem with my Stylesheet.
In my XML I have two types of tags. My result should be a 
table where I want 
for every block of the first tag a new row which contains all 
the following 
second tags.

(...)
Is this possbile with xsl? I haved tried this for several 

Sure. Try this:

<xsl:template match="root">
 <table>
  <!-- select all <first> that starts a new group, i.e., that doesn't have a
preceding-sibling or that the nearst preceding-sibling is a <second> -->
  <xsl:apply-templates select="first[not(preceding-sibling::*) or
preceding-sibling::*[1][self::second]]"/>
 </table>
</xsl:template>

<xsl:template match="first">
 <tr>
  <td><xsl:copy-of select="."/></td>
  <!-- first apply to the next consecutive <first> whose
following-sibling::second is the some of the current node  -->
  <xsl:apply-templates mode="next"
select="following-sibling::first[generate-id(following-sibling::second)=gene
rate-id(current()/following-sibling::second)]"/>
  <!-- then apply to the next consecutive <second> whose
following-sibling::first is the same of the first following-sibling::second
-->
  <xsl:apply-templates mode="next"
select="following-sibling::second[generate-id(following-sibling::first)=gene
rate-id(current()/following-sibling::second[1]/following-sibling::first)]"/>
 </tr>
</xsl:template>

<xsl:template match="first | second" mode="next">
 <td><xsl:copy-of select="."/></td>
</xsl:template>

Hope this helps you.



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



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