[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xsl] counting nodes before a certain node
Subject: Re: [xsl] counting nodes before a certain node From: a kusa <akusa8@xxxxxxxxx> Date: Fri, 4 Dec 2009 12:35:31 -0600 |
Hello Michael: I took the approach that you suggested instead of counting nodes, and it worked like a charm! Thanks a lot. On Tue, Dec 1, 2009 at 5:58 PM, Michael Kay <mike@xxxxxxxxxxxx> wrote: > > Right, so you don't actually want to count the nodes between the two book > elements, you only asked to count them because you thought that was a means > to an end? > > I think what you probably want is something like > > <xsl:template match="books"> > <xsl:for-each-group select="*" group-starting-with="book"> > <elem1> > <xsl:copy-of select="current-group()/(book/title, notes)"/> > </elem1> > </xsl:for-each-group> > </xsl:template> > > Regards, > > Michael Kay > http://www.saxonica.com/ > http://twitter.com/michaelhkay > > > > > > >> -----Original Message----- >> From: a kusa [mailto:akusa8@xxxxxxxxx] >> Sent: 01 December 2009 22:02 >> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx >> Subject: Re: [xsl] counting nodes before a certain node >> >> Hi >> >> Thank you for all your response. I am sorry that I haven't >> been able to express my problem clearly. I will try it again. >> What I need is this: >> My input: >> <books> >> <book> >> <title>First title</title> >> </book> >> <notes>The following books talk about history.</notes> >> <notes>For further information please log on to </notes> >> <notes>Thank you for choosing.. </notes> <book> >> <title>Abraham Lincoln </title> </book> >> >> <authors> >> sample data >> >> </authors> >> <notes>Please call... </notes> >> <notes>Copyright Information </notes> >> <book> >> >> sample data >> </book> >> </books> >> >> When I am in the template called book, I want to display all >> notes after the first book up to the second book element. >> >> So in my XSLT when I say: >> >> <xsl:template match="books"> >> <xsl:apply-templates select="book"/> >> </xsl:template> >> <xsl:template match="book"> >> <elem1> >> <title> >> <xsl:apply-templates select="title[1]"/> >> </title> >> <notes> >> <xsl:apply-templates >> select="following::notes[following-sibling::*[1][self::book]]"/> >> </notes> >> </elem1> >> </xsl:template> >> >> It selects only the last <notes> element and it selects both >> the notes elements right after <book> and after <author>. >> Output: >> <elem1> >> <title>First title</title> >> <notes>Thank you for choosing.. Copyright Information >> </notes> </elem1> <elem1> >> <title>Abraham Lincoln </title> >> <notes>Copyright Information </notes> >> </elem1> >> <elem1> >> <title/> >> <notes/> >> </elem1> >> >> My desired output is: >> >> <elem1> >> <title>First title</title> >> <notes>The following books talk about history.For >> further information please log on to. Thank you for >> choosing.. </notes> </elem1> <elem1> >> <title>Abraham Lincoln </title> >> <notes>Please call... Copyright Information </notes> >> </elem1> <elem1> >> <title/> >> <notes/> >> </elem1> >> >> Please let me know if I am more clear now. >> >> >> >> On Mon, Nov 30, 2009 at 6:01 PM, Wendell Piez >> <wapiez@xxxxxxxxxxxxxxxx> wrote: >> > Hi, >> > >> > At 06:02 PM 11/30/2009, Mike wrote: >> >> >> >> Given XSLT 2.0, you can select two elements $a and $b, and >> then the >> >> number of elements between these two is >> >> >> >> count($b/preceding-sibling::*) - count($b/preceding-sibling::*) - 1 >> >> >> >> This is probably more efficient than >> >> >> >> count(*[. >> $a and $b >> .]) >> >> >> >> but you can use that if it's more convenient. >> > >> > This answers the question as posed. >> > >> > A better solution, however, might be available if you >> specified your >> > count differently. >> > >> > For example, you might be better off asking "how do I count notes >> > elements that do not have book or author element >> ancestors", or "how >> > do I count notes elements that are directly inside books, but not >> > deeper". (From your problem statement it's impossible to >> know whether >> > one of these might not be the >> > case.) >> > >> > Cheers, >> > Wendell >> > >> >> > -----Original Message----- >> >> > From: a kusa [mailto:akusa8@xxxxxxxxx] >> >> > Sent: 30 November 2009 22:40 >> >> > To: xsl-list >> >> > Subject: [xsl] counting nodes before a certain node >> >> > >> >> > Hi >> >> > >> >> > How do I count nodes up to a certain point in XSLT? >> >> > >> >> > Example: >> >> > >> >> > My xml file looks like this: >> >> > >> >> > <books> >> >> > <book> >> >> > <title>First title</book> >> >> > </book> >> >> > <notes>The following books talk about history.</notes> >> <notes>For >> >> > further information please log on to </notes> >> <notes>Thank you for >> >> > choosing.. </notes> <book> <title>Abraham Lincoln >> </title> </book> >> >> > >> >> > <authors> >> >> > sample data >> >> > >> >> > </authors> >> >> > <notes>Please call... </notes> >> >> > <notes>Copyright Information </notes> <book> >> >> > >> >> > sample data >> >> > </book> >> >> > </books> >> >> > >> >> > In my XSLT file, I want to count all <notes> just before >> the second >> >> > <book> element but immediately after the first book >> element or just >> >> > after <authors>. >> >> > >> >> > How do I count all the notes elements here? >> > >> > >> > >> ====================================================================== >> > Wendell Piez >> mailto:wapiez@xxxxxxxxxxxxxxxx >> > Mulberry Technologies, Inc. >> http://www.mulberrytech.com >> > 17 West Jefferson Street Direct Phone: >> 301/315-9635 >> > Suite 207 Phone: >> 301/315-9631 >> > Rockville, MD 20850 Fax: >> 301/315-8285 >> > >> ---------------------------------------------------------------------- >> > Mulberry Technologies: A Consultancy Specializing in SGML and XML >> > >> ======================================================================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] counting nodes before a c, Michael Kay | Thread | [xsl] Why doesn't this simple XSLT , ohaya |
RE: [xsl] Nicer way to change conte, Michael Kay | Date | RE: [xsl] Generic stylesheet to fla, Sara Mitchell |
Month |