XSL Sort

A

aerotops

Hi,
I am trying to sort something using XSLT. I am going to give examples.

Original.xml

<Root>

<Car>
<Name>Ford</Name>
<DealerRating>3</DealerRating>
<MyRating>1</MyRating>
</Car>
<Car>
<Name>Honda</Name>
<DealerRating>4</DealerRating>
<MyRating>5</MyRating>
</Car>
<Car>
<Name>Nissan</Name>
<DealerRating>7</DealerRating>
<MyRating>3</MyRating>
</Car>
</Root>

Note:
1. The number of cars is limited to 3.
2. <DealerRating> has a higher priority than <MyRating> as long as DR>0
(Not 0). For example, if DR=3 and MR=2, then rating =3. Or if DR=0
and MR=1, now however, rating =1 because DR=0.
3. Apply some XSLT to Original.xml to get the following Result.xml

Result.xml

<Root>

<Car name1="Ford" rating1="1" name2="Nissan" rating2="3"
name3="Honda" rating3="5"/>

</Root>

As you can see, the attributes are generated by sorting the <Car>
elements in Original.xml in ascending order of rating as described
above.
Right now, I am doing this using dom4j. I would like to do this in
XSLT.


Note: Don't worry about the XSLT logic which compares <MyRating> and
<DealerRating> and then gives me a rating. I have already done that.

My problem is that I would like to sort on the rating1, rating2 and
rating3 attributes.

Some pseudocode for my XSLT sorting part (Right now, I parse the
Original.xml file using dom4j. Then, I add a <rating> element to the
Original.xml after deciding which rating to use in each <Car> element.
I don't want to change the Original.xml by inserting my rating
attribute.):


<xsl:for-each select="Car">

<!-- <xsl:sort> on <rating> which I get from my Java code

<if:position()=1>
Then write name1="XXX" and rating1="XXX"
</if>
<if position()=2>
Then write name2="XXX" and rating2="XXX"
</if>
<if position()=3>
Then write name3="XXX" and rating3="XXX"
</if>
</xsl:for-each>




Any suggestions would be appreciated.
Thanks,
Santa.
 
P

Peter Flynn

aerotops said:
Hi,
I am trying to sort something using XSLT. I am going to give examples.

Original.xml

<Root>

<Car>
<Name>Ford</Name>
<DealerRating>3</DealerRating>
<MyRating>1</MyRating>
</Car>
<Car>
<Name>Honda</Name>
<DealerRating>4</DealerRating>
<MyRating>5</MyRating>
</Car>
<Car>
<Name>Nissan</Name>
<DealerRating>7</DealerRating>
<MyRating>3</MyRating>
</Car>
</Root>

Note:
1. The number of cars is limited to 3.
2. <DealerRating> has a higher priority than <MyRating> as long as
DR>0
(Not 0).
For example, if DR=3 and MR=2, then rating =3.

But what if DR=2 and MR=3? Is the rating then 3 or 2?
Or if DR=0
and MR=1, now however, rating =1 because DR=0.
3. Apply some XSLT to Original.xml to get the following Result.xml

Result.xml

<Root>

<Car name1="Ford" rating1="1" name2="Nissan" rating2="3"
name3="Honda" rating3="5"/>

</Root>

As you can see, the attributes are generated by sorting the <Car>
elements in Original.xml in ascending order of rating as described
above.
Right now, I am doing this using dom4j. I would like to do this in
XSLT.


Note: Don't worry about the XSLT logic which compares <MyRating> and
<DealerRating> and then gives me a rating. I have already done that.

My problem is that I would like to sort on the rating1, rating2 and
rating3 attributes.

Some pseudocode for my XSLT sorting part (Right now, I parse the
Original.xml file using dom4j. Then, I add a <rating> element to the
Original.xml after deciding which rating to use in each <Car> element.
I don't want to change the Original.xml by inserting my rating
attribute.):


<xsl:for-each select="Car">

<!-- <xsl:sort> on <rating> which I get from my Java code

<if:position()=1>
Then write name1="XXX" and rating1="XXX"

<xsl:attribute name="name1">
<xsl:value-of select="Name"/>
</xsl:attribute>
<xsl:attribute name="rating1">
<xsl:value-of select="rating"/>
</xsl:attribute>

Presumably you have generated a composite value for <rating> somewhere.

You can find more help on the XSL List (http://www.mulberrytech.com)

///Peter
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,813
Latest member
lawrwtwinkle111

Latest Threads

Top