xsl-list
[Top] [All Lists]

Re: Sorting Upper-Case first. Microsoft bug?

2003-08-05 05:02:32
Hi Yago,
  i just found that MSXML 4.0 is respecting case-order
attribute for xsl:sort . It is producing output as
mentioned in the spec, and as you have written below.
The output you are getting is *correct* (i.e. what is
defined in the spec). *There are integers in the
Location attribute values which make you feel sorted
output is wrong*. Please try putting simple values for
e.g. b, B, a, A etc. as Location values and you will
be able to observe the correct result..

Regards,
Mukul

--- Yago Alvarado <Yago(_dot_)Alvarado(_at_)uk(_dot_)cpm-int(_dot_)com>
wrote:
Hi!

   I'm not quite sure whether this is a bug in the
Microsoft Parser
(Microsoft XML 4.0)
or it's me doing something wrong...

According to the W3C Recommendation:


----------------------->8---------------------->8--------------------------
case-order has the value upper-first or lower-first;
this applies when
data-type="text", and specifies that upper-case
letters should sort before
lower-case letters or vice-versa respectively. For
example, if lang="en",
then A a B b are sorted with
case-order="upper-first" and a A b B are sorted
with case-order="lower-first". The default value is
language dependent.

----------------------->8---------------------->8--------------------------


I'm trying to sort some xml and I want to show first
the elements in upper
case 
and then the ones in lower case. See xml/xsl below:


XML
---

<?xml version="1.0" encoding="iso-8859-1" ?>
<recordset name="">
    <row ReturnValue="0" Store_ID="7"
Location="WA4135"  />
    <row ReturnValue="0" Store_ID="5"
Location="wA4131"  />
    <row ReturnValue="0" Store_ID="6"
Location="WA4133"  />
    <row ReturnValue="0" Store_ID="8"
Location="wA4136"  />
    <row ReturnValue="0" Store_ID="9"
Location="WA4136"  />
    <row ReturnValue="0" Store_ID="10"
Location="WA4138" />
    <row ReturnValue="0" Store_ID="11"
Location="WA4139" />
</recordset>


Please note I've changed some of the Location items
to 'w' rather than 'W'
(Store_IDs 5 and 8)



XSL:
----

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="xml" indent="yes"/>


<xsl:template match="/">
      <recordset>
              <xsl:apply-templates select="recordset/row">
                      <xsl:sort select="@Location" data-type="text"
order="ascending" case-order="upper-first"/>
              </xsl:apply-templates>
      </recordset>
</xsl:template>

<xsl:template match="row">
      <row>
              <xsl:for-each select="@*">
                      <xsl:attribute name="{name()}">
                              <xsl:value-of select="."/>
                      </xsl:attribute>
              </xsl:for-each>
      </row>
</xsl:template>


</xsl:stylesheet>


Now... I would expect to see the following result:

<?xml version="1.0" encoding="UTF-16"?>
<recordset>
   <row ReturnValue="0" Store_ID="6"
Location="WA4133" />
   <row ReturnValue="0" Store_ID="7"
Location="WA4135" />
   <row ReturnValue="0" Store_ID="9"
Location="WA4136" />
   <row ReturnValue="0" Store_ID="10"
Location="WA4138" />
   <row ReturnValue="0" Store_ID="11"
Location="WA4139" />
   <row ReturnValue="0" Store_ID="5"
Location="wA4131" />
   <row ReturnValue="0" Store_ID="8"
Location="wA4136" />
</recordset>


Lower case 'w' items at the end.



However, what I am getting is:



<?xml version="1.0" encoding="UTF-16"?>
<recordset>
   <row ReturnValue="0" Store_ID="5"
Location="wA4131" />
   <row ReturnValue="0" Store_ID="6"
Location="WA4133" />
   <row ReturnValue="0" Store_ID="7"
Location="WA4135" />
   <row ReturnValue="0" Store_ID="9"
Location="WA4136" />
   <row ReturnValue="0" Store_ID="8"
Location="wA4136" />
   <row ReturnValue="0" Store_ID="10"
Location="WA4138" />
   <row ReturnValue="0" Store_ID="11"
Location="WA4139" />
</recordset>


So it seems to be doing the sorting independently of
the case and
then when it finds items with the same caracters, it
sorts them
according to the case i.e. first upper-case then
lower-case.



Is this the expected behaviour?
Is it me missing something here?



Thanks,
Yago


_____________________________________________________________________
This e-mail has been scanned for viruses by
MessageLabs.

 XSL-List info and archive: 
http://www.mulberrytech.com/xsl/xsl-list



__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list