|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Find the node with maximum elements
This may be better represented with 2.0's grouping facilities, but
here's the 1.0 solution I'd use to alleviate Mukul's concerns (building
off Michael's response with <xsl:sort/>):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="cars" match="*[Car]" use="count(Car)"/>
<xsl:template match="Sample">
<xsl:variable name="max-cars">
<xsl:for-each select=".//*[Car]">
<xsl:sort select="count(Car)" data-type="number"/>
<xsl:if test="position() = last()">
<xsl:value-of select="count(Car)"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:for-each select="key('cars', $max-cars)">
<!-- do whatever you'd do with the results here -->
<xsl:value-of select="name()"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
~ Scott
-----Original Message-----
From: Mukul Gandhi [mailto:gandhi.mukul@xxxxxxxxx]
Sent: Sunday, November 04, 2007 1:33 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: Find the node with maximum elements
Hi Mike,
IMHO, there seems to be a slight flaw in this logic. This program
will return only the last instance (i.e. only 1) of the maximum, and
not all maximum instances.
I think, Ken's answer meets exactly the OP's requirements.
On 11/4/07, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> Easiest (even in 2.0) is to sort elements according to the number of
> children and take the last:
>
> <xsl:for-each select="Sample/*">
> <xsl:sort select="count(child::*)" data-type="number"/>
> <xsl:if test="position()=last()">
> <xsl:value-of select="name()"/>
> </
> </
>
> Michael Kay
> http://www.saxonica.com/
>
> > -----Original Message-----
> > From: Avaneesh Ramprasad [mailto:avaneesh@xxxxxxxxxxxxxx]
> > Sent: 03 November 2007 19:05
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Subject: Find the node with maximum elements
> >
> > Hello,
> > I have a requirement to write a xsl transformation to find
> > the node which has the maximum number of elements
> >
> > Below is a sample xml file
> >
> > <Sample>
> > <Toyota>
> > <Car>Camry</Car>
> > <Car>Corrola</Car>
> > </Toyota>
> > <Honda>
> > <Car>Accord></Car>
> > <Car>Civic</Car>
> > <Car>Pilot</Car>
> > </Honda>
> > <Mitsubishi>
> > <Car>Lancer</Car>
> > <Car>Lancer</Car>
> > <Car>Lancer</Car>
> > </Mitsubishi>
> > <Hyundai>
> > <Car>Sonata</Car>
> > <Car>Accent</Car>
> > </Hyundai>
> > </Sample>
> >
> > The xsl should return Honda and Mitsubishi
> >
> > Would appreciate your help.
> >
> > Thanks
> > Avaneesh
--
Regards,
Mukul Gandhi
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|

Cart








