The 3rd row's integer part is different than
2nd(which makes *WA*4138 after *wA*4136
I can't see any reason why the later characters should have any
influence on the sorting if the first characters are different.
Change your data-type to 'number' :
<xsl:sort select="@Location" data-type="number" order="ascending"
case-order="upper-first"/>
and you will get the ordering you're after.
Case-order seems to function across the whole sort with
data-type='number' but not with data-type='text'.
Don't know why, I can't even seem to guess :)
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list