XSL Sort

Discussion in 'XML' started by aerotops, Nov 29, 2005.

  1. aerotops

    aerotops Guest

    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.
    aerotops, Nov 29, 2005
    #1
    1. Advertising

  2. aerotops

    Peter Flynn Guest

    aerotops wrote:

    > 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
    --
    XML FAQ: http://xml.silmaril.ie/
    Peter Flynn, Nov 29, 2005
    #2
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. nobody
    Replies:
    0
    Views:
    534
    nobody
    Jun 1, 2004
  2. Replies:
    1
    Views:
    3,595
    A. Bolmarcich
    May 27, 2005
  3. JerryJ
    Replies:
    11
    Views:
    1,400
    Dave Moore
    Apr 28, 2004
  4. Replies:
    2
    Views:
    9,259
    Martin Honnen
    Sep 5, 2006
  5. Navin
    Replies:
    1
    Views:
    684
    Ken Schaefer
    Sep 9, 2003
Loading...

Share This Page