RE: [xsl] Getting node w/ lowest attribute value

Subject: RE: [xsl] Getting node w/ lowest attribute value
From: "Bordeman, Chris" <Chris.Bordeman@xxxxxxxxxxxxxxxxx>
Date: Sun, 17 Aug 2008 10:33:30 -0500
I'll try it, thanks.

Chris Bordeman

-----Original Message-----
From: Mukul Gandhi [mailto:gandhi.mukul@xxxxxxxxx]
Sent: Sunday, August 17, 2008 2:51 AM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Getting node w/ lowest attribute value

I think, in this case it will become a grouping and sorting problem.
Please try this stylesheet,

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                       version="2.0">

<xsl:output method="xml" indent="yes" />

<xsl:template match="addresses">
  <result>
    <xsl:for-each-group select="address[@IsActive = 'true']"
group-by="@NumOrder">
      <xsl:sort select="current-grouping-key()" order="ascending"
data-type="number" />
      <xsl:copy-of select="." />
    </xsl:for-each-group>
  </result>
</xsl:template>

</xsl:stylesheet>

This will output all the 'address' elements (only 1st in the group) as
required. You can later select the nth one (or the 2nd) if needed.

On Sat, Aug 16, 2008 at 11:12 PM, Bordeman, Chris
<Chris.Bordeman@xxxxxxxxxxxxxxxxx> wrote:
> Cool, thanks Mukul, now how do I get the 2nd lowest?
>
> -----Original Message-----
> From: Mukul Gandhi [mailto:gandhi.mukul@xxxxxxxxx]
> Sent: Friday, August 15, 2008 1:10 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Getting node w/ lowest attribute value
>
> Please try this,
>
> addresses/address[(@IsActive = 'true') and (@NumOrder =
> min(../address[@IsActive = 'true']/@NumOrder))][1]
>
> This uses the XPath 2.0 function, 'min'.
>
> On Fri, Aug 15, 2008 at 11:22 PM, Bordeman, Chris
> <Chris.Bordeman@xxxxxxxxxxxxxxxxx> wrote:
>> Hi all.
>>
>> I have some nodes like:
>>
>> <addresses>
>>    <address IsActive="false" NumOrder=1>[...]</address>
>>    <address IsActive="true" NumOrder=3>[...]</address>
>>    <address IsActive="true" NumOrder=2>[...]</address> </addresses>
>>
>> How do I get the first address node where IsActive=true AND has the
>> lowest value for the NumOrder attribute?
>>
>> In the above case I'd want the 3rd address node (IsActive="true" and
>> NumOrder=2).
>>
>> Any assistance would be appreciated.  Thanks.


--
Regards,
Mukul Gandhi

Current Thread