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

RE: working out where the last() is

Subject: RE: working out where the last() is
From: "Robert Walpole" <robert.walpole@xxxxxxxxxxxx>
Date: Fri, 6 Oct 2006 12:19:08 +0100
robert walpole
Thanks to you all. That works perfectly. I had wondered about making a
single node list of the attribs I wanted, just couldn't see how select
it. I am using XSLT 2.0 so the seperator is ideal.

Thanks again.
Rob
(robert.walpole@xxxxxxxxxxxx)

> -----Original Message-----
> From: Michael Kay [mailto:mike@xxxxxxxxxxxx]
> Sent: 06 October 2006 11:41
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE:  working out where the last() is
>
>
> In XSLT 2.0 (with $a as the <areaserved> element):
>
> <xsl:value-of select="$a//*[not(*)]/@name" separator=",&#160;"/>
>
> In 1.0:
>
> <xsl:for-each select="$a//*[not(*)]/@name">
>   <xsl:value-of select="."/>
>   <xsl:if test="position() != last()">,&#160;</xsl:if>
> </xsl:for-each>
>
> last() gives you the number of items in the current node
> list, which in this
> case is the nodes selected by
> $a//*[not(*)]/@name.
>
> Michael Kay
> http://www.saxonica.com/
>
> > -----Original Message-----
> > From: Robert Walpole [mailto:robert.walpole@xxxxxxxxxxxx]
> > Sent: 06 October 2006 11:14
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject:  working out where the last() is
> >
> > Hi,
> >
> > I have some XML data which contains an areaserved node as follows:
> >
> > <areaserved>
> > 	<district name="South Hams">
> > 		<town name="Dartmouth">
> > 			<settlement name="Kingswear"/>
> > 		</town>
> > 		<town name="Totnes"/>
> > 	</district>
> > 	<district name="Torbay"/>
> > </areaserved>
> >
> > I am trying to write some XSLT to transform this to a list
> as follows:
> >
> > Kingswear, Totnes, Torbay
> >
> > In other words I want to output the name attribute of
> > elements that have no children and I want these names to be
> > seperated by a comma. I can output the attributes ok but my
> > problem is trying to prevent the code putting out a comma at
> > the end of the list, given that I don't know whether the end
> > of the list will be a settlement, town or district. I have
> > tried using last() like this:
> >
> > <xsl:if test="position() != last()">,&#160;</xsl:if>
> >
> > but this only works on the context node, so in this case
> > Kingswear, Totnes and Torbay are all the last and none of
> > them get a comma!
> >
> > Any ideas anyone?
> >
> > Many Thanks
> > Rob Walpole
> > (robert.walpole@xxxxxxxxxxxx)

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.