I need to sort a set of documents using attribute ‘d’ in ascending order. But in this attributes numbers mixed with letters.
Attributes could be like:
d=”11A-1-000003″ d=”11-1-000008a” d=”11-16-000009″ d=”11-1C-000008″ d=”11-9-000002″ d=”12-1-000008a” d=”11-15-00014″ d=”13-1-000007a” d=”11-15B-00014a” d=”11-24-00043a” d=”11-3-000023″ d=”11-3-000023a” d=”11-3-000023b”
I tried different solutions, but have no luck, order is not correct.
<xsl:sort select="normalize-space(@d)" data-type="text" order="ascending" case-order="upper-first"/>
<xsl:sort select="replace(normalize-space(@d), '[^d]', '')" data-type="number" order="ascending"/>
<xsl:sort select="substring-before(normalize-space(@d), '-')" data-type="number"/>
<xsl:sort select="substring-before(substring-after(normalize-space(@d), '-'), '-')" data-type="number"/>
<xsl:sort select="substring-after(substring-after(normalize-space(@d), '-'), '-')" data-type="number"/>
<xsl:sort select="substring-before(normalize-space(@d), '-')" data-type="text"/>
<xsl:sort select="substring-before(substring-after(normalize-space(@d), '-'), '-')" data-type="text"/>
<xsl:sort select="substring-after(substring-after(normalize-space(@d), '-'), '-')" data-type="text"/>
<xsl:sort select="number(tokenize(@d, '-')[1])" data-type="number"/>
<xsl:sort select="number(tokenize(@d, '-')[2])" data-type="number"/>
<xsl:sort select="number(tokenize(@d, '-')[3])" data-type="number"/>
<xsl:sort select="tokenize(normalize-space(@d), '-')[1]"/>
<xsl:sort select="tokenize(normalize-space(@d), '-')[2]"/>
<xsl:sort select="tokenize(normalize-space(@d), '-')[3]"/>
Actual result is that: 11-3-000023 is after 11-24-00043a but should be after 11-2,
11-1C-000008 is after 11-15B-000008 but should be after 11-1
The expected result is that numbers should have numbers should take precedence over letters.
Numbers are chapters, letters are subchapters.
As an example expected result is:
d="11-1-000008a" d="11-1C-000008" d="11-3-000023" d="11-3-000023a" d="11-3-000023b" d="11-9-000002" d="11-15-00014" d="11-15B-00014a" d="11-16-000009" d="11-24-00043a" d="11A-1-000003" d="12-1-000008a" d="13-1-000007a"