RE: [xsl] Selecting similar XML nodes by a sort criteria

Subject: RE: [xsl] Selecting similar XML nodes by a sort criteria
From: "Chaudhary, Harsh" <HCHAUDHA@xxxxxxxxx>
Date: Thu, 4 Oct 2007 15:46:43 -0500
I am sorry I wasn't clear but let me try and list my example again.

Before that, the color has nothing to do with the areacode being even or
odd.

For example -->

Original data:  1/2/3/4/5
Desired colors: B/G/B/G/B

Original data: 1/2/3/2/5
Sorted data: 1/2/2/3/5
Desired colors: B/G/G/B/G

Unfortunately, I can't use XSLT 2.0.

HC.

-----Original Message-----
From: Wendell Piez [mailto:wapiez@xxxxxxxxxxxxxxxx]
Sent: Thursday, October 04, 2007 1:46 PM
To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
Subject: Re: [xsl] Selecting similar XML nodes by a sort criteria


HC,

It seems to me that (in the example given) your color criterion is
simply the areacode itself. When areacode is odd, the color is grey;
when it's even, the color is blue.

If so, this is easily determined by testing (@areacode mod 2): when
is is 1 (or has Boolean value "true") make it one color, when it is 0
(or Boolean false) make it the other.

This won't work, however, if your areacode values are not perfectly
in series. That is, say you want blue/gray/blue/gray for areacode
values 1/2/4/5, since you happen to have no value 3. Or your
areacodes come with any arbitrary set of values not liable to such
testing.

In this case, things are more complicated. Let us know if this is a
possibility, and if so, whether you can use XSLT 2.0 (much easier) or
are restricted to using 1.0 (not as easy), and if the latter, whether
extension functions are allowable.

(This *can* be done in unextended XSLT 1.0 but I wouldn't wish it on
a friend -- with the exception of some friends on this list, who have
been known to find this sort of thing entertaining.)

Cheers,
Wendell

At 01:41 PM 10/4/2007, you wrote:
>Hi,
>
>I have the following XML. I would like to write XSLT which outputs the
>above XML in an HTML table. This table should be sorted by 'areacode'.
>
><?xml version="1.0" encoding="ISO-8859-1"?>
><bookstore>
>     <zipcode>
>         <book areacode='1'>
>             <title lang="eng">Harry Potter</title>
>             <price>29.99</price>
>         </book>
>         <book areacode='2'>
>             <title lang="eng">Learning XML</title>
>             <price>39.95</price>
>         </book>
>     </zipcode>
>     <zipcode>
>         <book areacode='2'>
>             <title lang="eng">Count of Monte Cristo</title>
>             <price>29.99</price>
>         </book>
>         <book areacode='3'>
>             <title lang="eng">Tom Sawyer</title>
>             <price>39.95</price>
>         </book>
>     </zipcode>
></bookstore>
>
>This part is fine. The problem comes when I try to color the rows in
the
>table so that the rows with the same areacode are the same color and
the
>colors alternate for rows that are not the same area code e.g. I have 2
>row colors, gray and blue. This is what the HTML should look like(sorry
>about the poor HTML markup, this is just for illustration):
>
><html>
>     <body>
>         <table>
>             <tr>
>                 <td>Area Code</td>
>                 <td>Title</td>
>             </tr>
>             <tr bgcolor='gray'>
>                 <td>1</td>
>                 <td>Harry Potter</td>
>             </tr>
>             <tr bgcolor='blue'>
>                 <td>2</td>
>                 <td>Learning XML</td>
>             </tr>
>             <tr bgcolor='blue'>
>                 <td>2</td>
>                 <td>Count of Monte Cristo</td>
>             </tr>
>             <tr bgcolor='gray'>
>                 <td>3</td>
>                 <td>Tom Sawyer</td>
>             </tr>
>         </table>
>     </body>
></html>
>
>What I tried was after doing something like (pseudocode):
>
>for-each(areacode)
>sort(by areacode)
>-----
>write out the html row
>
>I need some logic or pseudocode which I can insert in the line marked
>(-----) so that it would selectively apply the style attribute with the
>appropriate color with each row.
>
>I am hoping that my question is clear enough. But I could also write
the
>full XSLT if that would help. I made up this example, so I don't have
>the XSLT code for this particular example.
>
>Does anyone know of any XSLT or XPath function I could use.
>
>I am trying to use the XPath axes preceding-sibling. But its not
working
>for me.
>
>Thanks,
>HC.


======================================================================
Wendell Piez                            mailto:wapiez@xxxxxxxxxxxxxxxx
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
   Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================

Current Thread