0
  1. XML file data which need to transform, where date and time is in 'DD/MM/YYYY-HH:MM' format and i also want to get sorted dates in this format too.
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="date1.xslt"?>
    <segments>
            <segment>
                <date> 01/12/2019-07:35 </date>
                <segnum></segnum>
            </segment>
            <segment>
                <date> 01/12/2019-20:08 </date>
                <segnum></segnum>
            </segment>
            <segment>
                <date> 09/09/2019-05:10 </date>
                <segnum></segnum>
            </segment>
            <segment>
                <date> 10/12/2019-09:06 </date>
                <segnum></segnum>
            </segment>
            <segment>
                <date> 05/11/2019-21:45</date>
                <segnum></segnum>
            </segment>
            <segment>
                <date> 05/04/2019-22:03</date>
                <segnum></segnum>
            </segment>
            <segment>
                <date> 04/05/2018-23:10 </date>
                <segnum></segnum>
            </segment>
            <segment>
                <date> 06/07/2018-23:17 </date>
                <segnum></segnum>
            </segment>
            <segment>
                <date> 06/09/2018-11:16 </date>
                <segnum></segnum>
            </segment>
            <segment>
                <date> 06/09/2018-07:06 </date>
                <segnum></segnum>
            </segment>

    </segments>
  1. XSLT which i am using.
    <?xml version="1.0" encoding="UTF-8"?>

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="/">
            <xsl:for-each select="segments/segment">
               <xsl:sort select="date"/>
               <xsl:value-of select="date"/>
                <segmentNumber>
                    <xsl:value-of select="position()"/>
                </segmentNumber>
            </xsl:for-each>
        </xsl:template>
    </xsl:stylesheet>   
  1. Desired Result which i need,this is what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly what i needed exactly
     04/05/2018-23:10 <segmentNumber>1</segmentNumber> 
     06/07/2018-23:17 <segmentNumber>2</segmentNumber> 
     06/09/2018-07:06 <segmentNumber>3</segmentNumber> 
     06/09/2018-11:16 <segmentNumber>4</segmentNumber> 
     05/04/2019-22:03 <segmentNumber>5</segmentNumber> 
     09/09/2019-05:10 <segmentNumber>6</segmentNumber> 
     05/11/2019-21:45 <segmentNumber>7</segmentNumber> 
     01/12/2019-07:35 <segmentNumber>8</segmentNumber> 
     01/12/2019-20:08 <segmentNumber>9</segmentNumber> 
     10/12/2019-09:06 <segmentNumber>10</segmentNumber>

1 Answers1

1

That's a strange format of output. Try this approach:

<xsl:template match="/segments">
    <xsl:for-each select="segment">
        <!-- sort by year -->
        <xsl:sort select="substring(normalize-space(date), 7, 4)" data-type="number"/>
        <!-- sort by month -->
        <xsl:sort select="substring(normalize-space(date), 4, 2)" data-type="number"/>
        <!-- sort by day -->
        <xsl:sort select="substring(normalize-space(date), 1, 2)" data-type="number"/>
        <!-- sort by time -->
        <xsl:sort select="substring-after(date, '-')" data-type="text"/>
        <xsl:value-of select="date"/>
        <segmentNumber>
            <xsl:value-of select="position()"/>
        </segmentNumber>
    </xsl:for-each>
</xsl:template>
michael.hor257k
  • 113,275
  • 6
  • 33
  • 51