Subject: Re: [xsl] best way to divide selected elements? From: Jeni Tennison <mail@xxxxxxxxxxxxxxxx> Date: Wed, 21 Feb 2001 14:58:41 +0000 |
Hi Marc, > I currently have an xsl that takes a directory file list, then based > on tags within each file, contructs an xml file in which the file > names are grouped by category, like this: [snip] > I'd like to change it so that if category element is going to > include more than 20 file elements another category element is > created: This is an example of grouping by position. In general the method for grouping by position is to find the first node in each group (i.e. the 1st file element, the 21st file element, the 41st file element and so on) and apply templates to it. Then, within the applied template, create the grouping structure (i.e. the category element) and insert the content for the group (i.e. the relevant file elements). Getting the first file element in each group involves selecting those file elements whose position in the category, mod 20, is 1: file[position() mod 20 = 1] So have a template that applies templates only to those initial file elements: <xsl:template match="category"> <xsl:apply-templates select="file[position() mod 20 = 1]" /> </xsl:template> Now when you match a file element, you know it's one of these. You need to create a category element to hold the group: <xsl:template match="file"> <category> ... </category> </xsl:template> and then insert into it copies of the relevant file elements. The relevant file elements are the one that you're on and its following 19 siblings: . | following-sibling::file[position() < 20] You can copy these with xsl:copy-of. So the complete template is: <xsl:template match="file"> <category> <xsl:copy-of select=". | following-sibling::file[position() < 20]" /> </category> </xsl:template> I hope that helps, Jeni --- Jeni Tennison http://www.jenitennison.com/ XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] best way to divide selected e, Elliott, Marc | Thread | [xsl] thanks, also thoughts on xsl:, Dave Gomboc |
RE: [xsl] obtaining details from a , William Crawley | Date | RE: [xsl] forcing Line breaks, cedric trolez |
Month |