[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: counting nodes before a certain node

Subject: Re: counting nodes before a certain node
From: a kusa <akusa8@xxxxxxxxx>
Date: Tue, 1 Dec 2009 16:02:14 -0600
Re:  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:  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

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.