Subject: Re: [xsl] how to group equal nodes by a it's position() From: "Paul Tyson" <paul@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 28 Sep 2001 13:45:12 -0700 |
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@xxxxxxxxx> To: "XSL-List@lists. mulberrytech. com (E-mail)" <XSL-List@xxxxxxxxxxxxxxxxxxxxxx> 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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] how to group equal nodes by a, Dmitri Ilyin | Thread | [xsl] document() and node-list vs. , Michael Case |
Re: [xsl] document() and node-list , Wendell Piez | Date | [xsl] Newbie question - transformin, Jennifer Wrightsell |
Month |