This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: how to group equal nodes by a it's position()
- To: "'xsl-list at lists dot mulberrytech dot com'" <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] how to group equal nodes by a it's position()
- From: Dmitri Ilyin <dmitri dot ilyin at memIQ dot com>
- Date: Mon, 1 Oct 2001 13:44:19 +0200
- Reply-To: xsl-list at lists dot mulberrytech dot com
thanks Paul. It does what I want.
> -----Original Message-----
> From: Paul Tyson [mailto:paul@precisiondocuments.com]
> Sent: Friday, September 28, 2001 10:45 PM
> To: xsl-list@lists.mulberrytech.com
> Subject: Re: [xsl] how to group equal nodes by a it's position()
>
>
> Dmitri,
>
> This does, literally, what you asked for.
>
> If you want HTML-like tables with rows and cells, you'd use
> <table> literal
> result elements (instead of <table_n>), and add some template
> processing of
> <call> elements (instead of copy-of). One way of making
> table rows from a
> list is shown in archived post:
>
> http://www.biglist.com/lists/xsl-list/archives/200109/msg01324.html
>
> <xsl:template match="calls">
> <xsl:call-template name="make-tables"/>
> </xsl:template>
>
> <xsl:template name="make-tables">
> <xsl:param name="nth-item" select="1"/>
> <xsl:param name="table-number" select="1"/>
> <xsl:variable name="table-name"
> select="concat('table_',$table-number)"/>
> <xsl:choose>
> <xsl:when test="$nth-item > count(call)"/><!-- done -->
> <xsl:when test="$nth-item = 1">
> <!-- the first table, 10 items -->
> <xsl:element name="{$table-name}">
> <xsl:copy-of select="call[position() <= 10]"/>
> </xsl:element>
> <xsl:call-template name="make-tables">
> <xsl:with-param name="nth-item"
> select="$nth-item + 10"/>
> <xsl:with-param name="table-number"
> select="$table-number +
> 1"/>
> </xsl:call-template>
> </xsl:when>
> <xsl:when test="count(call) - $nth-item < 20">
> <!-- the last table, up to 20 items -->
> <xsl:element name="{$table-name}">
> <xsl:copy-of select="call[position() >=
> $nth-item]"/>
> </xsl:element>
> </xsl:when>
> <xsl:otherwise>
> <xsl:element name="{$table-name}">
> <xsl:copy-of select="call[position() >=
> $nth-item and
> position() < $nth-item + 15]"/>
> </xsl:element>
> <xsl:call-template name="make-tables">
> <xsl:with-param name="nth-item"
> select="$nth-item + 15"/>
> <xsl:with-param name="table-number"
> select="$table-number +
> 1"/>
> </xsl:call-template>
> </xsl:otherwise>
> </xsl:choose>
> </xsl:template>
>
> Have fun,
> Paul
>
> ----- Original Message -----
> From: "Dmitri Ilyin" <dmitri.ilyin@memIQ.com>
> To: "XSL-List@lists. mulberrytech. com (E-mail)"
> <XSL-List@lists.mulberrytech.com>
> Sent: Friday, September 28, 2001 12:15 PM
> Subject: [xsl] how to group equal nodes by a it's position()
>
>
> > Hi *,
> >
> > i have next xml:
> >
> > <calls>
> > <call>sme text</call>
> > <call>sme text</call>
> > <call>sme text</call>
> > <call>sme text</call>
> > <call>sme text</call>
> > <call>sme text</call>
> > <call>sme text</call>
> > <call>sme text</call>
> > <call>sme text</call>
> > <call>sme text</call>
> > .....
> > <call>sme text</call>
> > </calls>
> >
> > i have to group the <call> by it's position()
> > to get
> > <table_1>
> > <call>some text</call>
> > from position 1 to 10 (10 elements in the table_1)
> > <call>some text</call>
> > </table_1>
> > <table_2>
> > <call>some text</call>
> > from position 11 to 25 (15 elements in table_2)
> > </table_2>
> > ....
> > <table_n>
> > <call>some text</call>
> > from position 26 to 40 (15 elements in table_n)
> > </table_n>
> >
> > <table_x>
> > <call>some text</call>
> > from position nnn to mmm (20 elements or less in table_x)
> > </table_x>
> >
> > So I have 3 types of tables, with 10, 15, 20 elements.
> > The number of call nodes in table 1 must be 10 and it must
> be first 10
> > elements,
> > the number of call nodes in tables 2 to n must be 15,
> > the number of call nodes in last table must be 20 or less.
> >
> > the number of call elements can be different.
> > eg i have 100 call elements
> > so i have to put in the first table 10 elements,
> > in the tables from 2..6 15 elements
> > and in the last table 15 elements.
> >
> > If i have 106 elements i could put in last table 20 (and
> make the last
> table
> > complete)
> > elements end still have ones more element,
> > so i have to create one more table with 15 elements and put
> in the last
> > table the last 6 elements.
> >
> >
> > are there any solutions of that problem???
> >
> > thanks for advise
> >
> > Dmitri
> >
> > XSL-List info and archive:
http://www.mulberrytech.com/xsl/xsl-list
>
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list