[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl] Correctly sorting ID's
Subject: RE: [xsl] Correctly sorting ID's From: "Kienle, Steven C [IT/0200]" <steven.c.kienle@xxxxxxxxxxxxx> Date: Tue, 21 Jan 2003 11:30:09 -0500 |
To my eyes, this isn't a simple problem, mainly because you don't have consistency in the format of the ID. By that I mean you have CM09.1 and CM09.10, which numerically are the same, but I think you mean something more like CM09.01 and CM09.10. Also, because you appear to allow for any number of periods in the ID, it becomes an open ended sort, in effect. If would be best if you can control your input to force a specific format e.g. 'aa##.##.##.##' and force all parts to be fully qualified. If you have no control over the input, you can do the sort like the following: <xsl:sort select="substring-before(substring(concat(@id,'.0.0.0'), 2), '.')" data-type="number" /> <xsl:sort select="substring-before(substring-after(concat(@id,'.0.0.0'), '.'), '.')" data-type="number" /> <xsl:sort select="substring-before(substring-after(substring-after(concat(@id,'.0.0.0' ), '.'), '.'), '.')" data-type="number" /> Where you have to add enough sort elements to match the reasonable maximum number of sub-sections. You also have to concat enough '.0.0...' to cover the case where only the main section's number exists. The substring-after and substring-before functions allow you to step through the sub-section numbers and add them to the sort. This also ignores the preceeding alphabetic code, but that can be added to the sort if it is important. It doesn't look pretty, and certainly has limitations, but that will get the work done. Steve -----Original Message----- From: Niki Dinsey - CSW [mailto:niki.dinsey@xxxxxxxxx] Sent: Tuesday, January 21, 2003 10:24 AM To: xsl-list-digest@xxxxxxxxxxxxxxxxxxxxxx Subject: [xsl] Correctly sorting ID's Hi there list guru's, I have a question. In a transform, is it possible to correctly sort these poorly formed id's listed below Currently my standard sort: <xsl:apply-templates> <xsl:sort select="node()/@id"/> </xsl:apply-templates> Returns this: <someNode id="CM09.1"/> <someNode id="CM09.1.5"/> <someNode id="CM09.10"/> <someNode id="CM09.10.10.3"/> <someNode id="CM09.10.15"/> <someNode id="CM09.18.2"/> <someNode id="CM09.2"/> <someNode id="CM09.2.2"/> <someNode id="CM09.22"/> <someNode id="CM09.22.1"/> it's the old classic... 1 then 10 before 2 etc. I really need them sorted like the following: <someNode id="CM09.1"/> <someNode id="CM09.1.5"/> <someNode id="CM09.2"/> <someNode id="CM09.2.2"/> <someNode id="CM09.10"/> <someNode id="CM09.10.10.3"/> <someNode id="CM09.10.15"/> <someNode id="CM09.18.2"/> <someNode id="CM09.22"/> <someNode id="CM09.22.1"/> I'm looking now to see if I can work this out and I was wondering if anybody would be able to help me with the correct sort selection. The only other issue to be aware of is that the dots can go on indefinitely and I don't know until runtime the highest number of dot's in the any one id will be. If anybody could point me to a resource that deals with this I would be most grateful. Regards, Niki Dinsey XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Correctly sorting ID's, Niki Dinsey - CSW | Thread | [xsl] xsl pipeline filters, Errea Alexandra |
RE: [xsl] Correctly sorting ID's, Niki Dinsey - CSW | Date | [xsl] xsl pipeline filters, Errea Alexandra |
Month |