Announcement

Collapse
No announcement yet.

Alphanumerisch sortieren in XSL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Alphanumerisch sortieren in XSL

    Guten Morgen! Als XSLT Anfänger stehe ich bereits vor einem richtige Problem! Und zwar will ich das folgende XML Doc per XSL alphanumerisch nach "spediteur", "bestellnr", "lfs_transportnr", und anschliessend nach dem Datum sortieren. Ich habe bereits einiges ausprobiert, konnte jedoch nichts bewirken. Habt Ihr einen Rat für mich!? Die Problematische Sektion im Stylesheet habe ich rot hervorgehoben! Im Moment funtkioniert nicht einmal diese Sortierung (nicht alphanumerisch)!

    Meine XML Grundlage:

    Code:
    <?xml version="1.0" encoding="iso-8859-1" ?> 
    - <selection>
    - <lfs id="0">
      <spediteur>Test GmbH</spediteur> 
      <kundenauftragsnr /> 
      <kilometer /> 
      <bestellnr>KBF07002A</bestellnr> 
      <datum>2007-10-25 00:00:00</datum> 
      <lfsnr>1936-4 Okt</lfsnr> 
      <ziel>Ort A</ziel> 
      <lfsStatus>LFS</lfsStatus> 
      <bemerkung>frei Waggon</bemerkung> 
      <lfssubnr /> 
      <werksmassFM /> 
      <werksmassRM /> 
      <werksmassLUT /> 
      <werksmassATR /> 
      <lfsGuid>22abcca76fffb24ca8a8596d154d2be3</lfsGuid> 
      <letzteAenderung>2007-10-30 11:45:11</letzteAenderung> 
      <lfs_emenge>Rm</lfs_emenge> 
      <lfs_refnr>1936-4 Okt</lfs_refnr> 
      <lfs_transportnr>1936-4 Okt</lfs_transportnr> 
      <vguid_ref /> 
    - <lfs_sub id="0">
      <lfss_guid>CA22A2F0543C462695B8FCD23F70521B</lfss_guid> 
      <lfsGuid_ref>22abcca76fffb24ca8a8596d154d2be3</lfsGuid_ref> 
      <pname>401</pname> 
      <pguid_ref>5121426c0dfd544bbab5d1431c1a074a</pguid_ref> 
      <lmenge>67.000000</lmenge> 
      <restmenge>0.000000</restmenge> 
      <lfs_sub_exported /> 
      <lfs_sub_rmfac>1.000000</lfs_sub_rmfac> 
      <wmFM /> 
      <wmEinhRm>1</wmEinhRm> 
      <wmRM /> 
      <wmLUT /> 
      <wmATR /> 
      </lfs_sub>
    - <lfs_sub id="1">
      <lfss_guid>E0DE8E69143A437A82B31082EC1E8800</lfss_guid> 
      <lfsGuid_ref>22abcca76fffb24ca8a8596d154d2be3</lfsGuid_ref> 
      <pname>402</pname> 
      <pguid_ref>2fc8af2da088784f9fb6307e4f86fed7</pguid_ref> 
      <lmenge>11.000000</lmenge> 
      <restmenge>0.000000</restmenge> 
      <lfs_sub_exported /> 
      <lfs_sub_rmfac>1.000000</lfs_sub_rmfac> 
      <wmFM /> 
      <wmEinhRm>1</wmEinhRm> 
      <wmRM /> 
      <wmLUT /> 
      <wmATR /> 
      </lfs_sub>
      </lfs>
    - <lfs id="1">
      <spediteur>Test GmbH</spediteur> 
      <kundenauftragsnr /> 
      <kilometer /> 
      <bestellnr>KBF07007A</bestellnr> 
      <datum>2008-05-28 00:00:00</datum> 
       <lfsnr>Bohn00647</lfsnr>  
      <ziel>Ort C</ziel> 
      <waggonnr /> 
      <ankunftsdatum /> 
      <lfsStatus>LFS</lfsStatus> 
      <bemerkung>Frei Werk</bemerkung> 
      <lfssubnr /> 
      <werksmassFM /> 
      <werksmassRM /> 
      <werksmassLUT /> 
      <werksmassATR /> 
       <lfsGuid>231b364035097a46886c3f789908fe98</lfsGuid> 
      <letzteAenderung>2008-06-03 12:32:06</letzteAenderung> 
      <lfs_emenge>Rm</lfs_emenge> 
      <lfs_refnr>29266</lfs_refnr> 
      <lfs_transportnr>29266</lfs_transportnr> 
      <vguid_ref /> 
      - <lfs_sub id="0">
      <lfss_guid>8D2AB84AEEB14F67843FD00A4A7E4224</lfss_guid> 
      <lfsGuid_ref>231b364035097a46886c3f789908fe98</lfsGuid_ref> 
      <pname>200</pname> 
      <pguid_ref>25211787e9847b4184547289c7e77965</pguid_ref> 
      <lmenge>19.820000</lmenge> 
      <restmenge>0.000000</restmenge> 
      <lfs_sub_exported /> 
      <lfs_sub_rmfac>1.000000</lfs_sub_rmfac> 
      <wmFM /> 
      <wmEinhRm /> 
      <wmRM /> 
      <wmLUT /> 
      <wmATR /> 
      </lfs_sub>
    - <lfs_sub id="1">
      <lfss_guid>7623E48440DA4995910096E1E0A90C64</lfss_guid> 
      <lfsGuid_ref>231b364035097a46886c3f789908fe98</lfsGuid_ref> 
      <pname>129</pname> 
      <pguid_ref>5a2ac844f00a5b4ca9d698894de33727</pguid_ref> 
      <lmenge>33.000000</lmenge> 
      <restmenge>0.000000</restmenge> 
      <lfs_sub_exported /> 
      <lfs_sub_rmfac>1.000000</lfs_sub_rmfac> 
      <wmFM /> 
      <wmEinhRm /> 
      <wmRM /> 
      <wmLUT /> 
      <wmATR />  
      </lfs_sub>
      </lfs>
    </selection>
    
    Mein Stylesheet sieht wie folgt aus:

    Code:
    <?xml version="1.0" encoding="iso-8859-1"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    
    <xsl:output method="html" indent="yes" encoding="iso-8859-1"/>
    <xsl:decimal-format decimal-separator="," grouping-separator="."/>	
    <xsl:template match="/selection">
    
    	
    <html>
    <head>
    </head>
    							
    <table style="margin-bottom: 0.2cm; width: 25.6cm; table-layout: fixed; border-color: black; border-width: 1px; border-style: solid; font-size: 10pt;">
    <thead>
    <tr>
    <th class="border1" style="width: 3.5cm;"><center>Spediteur</center></th>
    <th class="border1" style="width: 2.8cm;"><center>Kaufnr</center></th>
    <th class="border1" style="width: 3.3cm;"><center>LNr</center></th>
    <th class="border1" style="width: 4cm;"><center>Lieferreferenz</center></th>
    <th class="border1" style="width: 3cm;"><center>TransportNr</center></th>
    <th class="border1" style="width: 2.0cm;"><center>Datum</center></th>
    <th class="border1" style="width: 3.0cm;"><center>Empfänger</center></th>
    <th class="border1" style="width: 2.0cm;"><center>WM</center></th>
    </tr>
    </thead>
    <tfoot/>
    <tbody>
    					
    <xsl:for-each select="spediteur">
    <xsl:for-each select=" lfs">
    <xsl:sort data-type="text" select="row[1]/spediteur"/>
    <xsl:sort data-type="text" select="row[1]/lfsnr"/>
    <tr>
    
    <td rowspan="{@rowspan}" class="border1" style="background-color: #DDDDDD; vertical-align=middle;"><xsl:value-of select="row[1]/@spediteur"/></td>
    
    <td rowspan="{@rowspan}" class="border1" style="background-color: #DDDDDD; vertical-align=middle;"><xsl:value-of select="row[1]/@bestellnr"/></td>
    
    <td rowspan="{@rowspan}" class="border1" style="background-color: #DDDDDD; vertical-align=middle;"><xsl:value-of select="row[1]/@lfsnr"/></td>
    
    <td rowspan="{@rowspan}" class="border1" style="background-color: #DDDDDD; vertical-align=middle;"><xsl:value-of select="row[1]/@lfs_refnr"/></td>
    
    <td rowspan="{@rowspan}" class="border1" style="background-color: #DDDDDD; vertical-align=middle;"><xsl:value-of select="row[1]/@lfs_transportnr"/></td>
    
    <td rowspan="{@rowspan}" class="border1" style="background-color: #DDDDDD; vertical-align=middle;"><xsl:value-of select="datum"/></td>
    
    <td rowspan="{@rowspan}" class="border1" style="background-color: #DDDDDD; vertical-align=middle;"><xsl:value-of select="row[1]/@ziel"/></td>
    				
    <td rowspan="{@rowspan}" class="border1" style="background-color: #DDDDDD; vertical-align=middle;"><xsl:if test="wmmenge &gt; 0"><xsl:value-of select="format-number(wmmenge, '#.##0,00')"/> <xsl:value-of select="wmunit"/></xsl:if></td>
    </tr>
    <xsl:for-each select="row">
    <tr display="none">
    </tr>
    </xsl:for-each>
    </xsl:for-each>		
    </xsl:for-each>					
    </tbody>
    </table>
    </body>
    </html>
    </xsl:template>	
    </xsl:stylesheet>

  • #2
    Der Struktur nach gibt es keine row-Elemente unterhalb von lfs-Elementen.
    Zuletzt editiert von Thomas Meinike; 20.06.2008, 11:19.

    Comment


    • #3
      @ Thomas! Vielen Dank für Deine Antwort! Ich Schussel hab ja auch einen Auszug aus der falschen XML Datei gepostet! Sorry für die späte Antwort, aber ich hab's echt nicht geschafft eher zu antworten!

      Die richtige sieht so aus:

      Code:
      <?xml version="1.0" encoding="iso-8859-1"?>
      <selection>
          <spediteur>
              <lfs rowspan="3">
                  <row spediteur="Naumann&#xA;" bestellnr="SJT05015B&#xA;" lfsnr="1375645&#xA;" datum="2006-10-16T00:00:00" ziel="Bremen" lfs_emenge="tl" lfsGuid="c2882bb856b7104599bc262783ceb1b0" werksmassLUT="15.192" lmenge="9.231" pguid_ref="214e19dc2d4d29439e1893d08cac4bc8" wmValid="3" punktName="3A" holzart="Fi" sortierung="ISK" guete="" laenge="3.0">
                      <lmengeLfsUnit>5.00</lmengeLfsUnit>
                      <werksmass>5.06</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Fi, ISK, 3,00</sorte>
                  </row>
                  <row spediteur="Naumann&#xA;" bestellnr="SJT05015B&#xA;" lfsnr="1375645&#xA;" datum="2006-10-16T00:00:00" ziel="Bremen" lfs_emenge="tl" lfsGuid="c2882bb856b7104599bc262783ceb1b0" werksmassLUT="15.192" lmenge="18.462" pguid_ref="1ba40666fc7ad642ab0cbf50c0e41f5e" wmValid="3" punktName="05015B/ 3" holzart="Fi" sortierung="ISK" guete="" laenge="3.0">
                      <lmengeLfsUnit>10.00</lmengeLfsUnit>
                      <werksmass>10.13</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Fi, ISK, 3,00</sorte>
                  </row>
                  <unit>tl</unit>
                  <datum>2006-10-16</datum>
                  <wmunit>tl</wmunit>
                  <lmengeSumme>15.00</lmengeSumme>
                  <wmmenge>15.19</wmmenge>
                  <betrag>0.00</betrag>
              </lfs>
              <lfs rowspan="3">
                  <row spediteur="Naumann&#xA;" bestellnr="SJT05015B&#xA;" lfsnr="1374984&#xA;" datum="2006-11-22T00:00:00" ziel="Bremen" lfs_emenge="tl" lfsGuid="5e14b656f3c5194780eccc21aaf55015" werksmassLUT="20.660" lmenge="14.769" pguid_ref="SJT/05015B/7" wmValid="3" punktName="05015B/7 Greven" holzart="Ki" sortierung="ISK" guete="">
                      <lmengeLfsUnit>8.00</lmengeLfsUnit>
                      <werksmass>8.26</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Ki, ISK</sorte>
                  </row>
                  <row spediteur="Naumann&#xA;" bestellnr="SJT05015B&#xA;" lfsnr="1374984&#xA;" datum="2006-11-22T00:00:00" ziel="Bremen" lfs_emenge="tl" lfsGuid="5e14b656f3c5194780eccc21aaf55015" werksmassLUT="20.660" lmenge="22.154" pguid_ref="e90bd4bf4497af4fa284e5845e9c436c" wmValid="3" punktName="5A" holzart="Fi" sortierung="ISK" guete="" laenge="3.0">
                      <lmengeLfsUnit>12.00</lmengeLfsUnit>
                      <werksmass>12.40</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Fi, ISK, 3,00</sorte>
                  </row>
                  <unit>tl</unit>
                  <datum>2006-11-22</datum>
                  <wmunit>tl</wmunit>
                  <lmengeSumme>20.00</lmengeSumme>
                  <wmmenge>20.66</wmmenge>
                  <betrag>0.00</betrag>
              </lfs>
              <lfs rowspan="4">
                  <row spediteur="Naumann&#xA;" bestellnr="SJT05015B&#xA;" lfsnr="1378591&#xA;" datum="2006-11-15T00:00:00" ziel="Bremen" lfs_emenge="tl" lfsGuid="5b20fd570ecae34fbc492b8485f2e6b0" werksmassLUT="10.800" lmenge="3.692" pguid_ref="cbba23fee1cda84fb797d9cb441dc7fe" wmValid="3" punktName="1048" holzart="Ndh" sortierung="ISK" guete="" laenge="3.0">
                      <lmengeLfsUnit>2.00</lmengeLfsUnit>
                      <werksmass>2.16</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Ndh, ISK, 3,00</sorte>
                  </row>
                  <row spediteur="Naumann&#xA;" bestellnr="SJT05015B&#xA;" lfsnr="1378591&#xA;" datum="2006-11-15T00:00:00" ziel="Bremen" lfs_emenge="tl" lfsGuid="5b20fd570ecae34fbc492b8485f2e6b0" werksmassLUT="10.800" lmenge="3.692" pguid_ref="SJT/05015B/7" wmValid="3" punktName="05015B/7 Greven" holzart="Ki" sortierung="ISK" guete="">
                      <lmengeLfsUnit>2.00</lmengeLfsUnit>
                      <werksmass>2.16</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Ki, ISK</sorte>
                  </row>
                  <row spediteur="Naumann&#xA;" bestellnr="SJT05015B&#xA;" lfsnr="1378591&#xA;" datum="2006-11-15T00:00:00" ziel="Bremen" lfs_emenge="tl" lfsGuid="5b20fd570ecae34fbc492b8485f2e6b0" werksmassLUT="10.800" lmenge="11.077" pguid_ref="9113f0783e2bb943ab95d046629ff4b8" wmValid="3" punktName="2A" holzart="Fi" sortierung="ISK" guete="" laenge="3.0">
                      <lmengeLfsUnit>6.00</lmengeLfsUnit>
                      <werksmass>6.48</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Fi, ISK, 3,00</sorte>
                  </row>
                  <unit>tl</unit>
                  <datum>2006-11-15</datum>
                  <wmunit>tl</wmunit>
                  <lmengeSumme>10.00</lmengeSumme>
                  <wmmenge>10.80</wmmenge>
                  <betrag>0.00</betrag>
              </lfs>
              <betrag>0.00</betrag>
          </spediteur>
          <spediteur>
              <lfs rowspan="3">
                  <row spediteur="Mustermann" bestellnr="SJT07016A" lfsnr="HNAU00252" datum="2007-10-01T00:00:00" ziel="Berlin" lfs_refnr="3131-0" lfs_emenge="Fm" lfsGuid="f288d1c170451e4bbe6da8414f225a26" lfs_transportnr="3131-0" werksmassFM="72.590" lmenge="30.769" pguid_ref="010C5B05002F0618582C000000000000" wmValid="1" punktName="171" holzart="Fi" sortierung="Abs" guete="B/C" laenge="4.2">
                      <lmengeLfsUnit>20.00</lmengeLfsUnit>
                      <werksmass>22.34</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Fi, Abs, B/C, 4,20</sorte>
                  </row>
                  <row spediteur="Mustermann" bestellnr="SJT07016A" lfsnr="HNAU00252" datum="2007-10-01T00:00:00" ziel="Berlin" lfs_refnr="3131-0" lfs_emenge="Fm" lfsGuid="f288d1c170451e4bbe6da8414f225a26" lfs_transportnr="3131-0" werksmassFM="72.590" lmenge="69.231" pguid_ref="010C5B05001F02582A1A000000000000" wmValid="1" punktName="163" holzart="Fi" sortierung="Abs" guete="B/C" laenge="4.2">
                      <lmengeLfsUnit>45.00</lmengeLfsUnit>
                      <werksmass>50.25</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Fi, Abs, B/C, 4,20</sorte>
                  </row>
                  <unit>Fm</unit>
                  <datum>2007-10-01</datum>
                  <wmunit>Fm</wmunit>
                  <lmengeSumme>65.00</lmengeSumme>
                  <wmmenge>72.59</wmmenge>
                  <betrag>0.00</betrag>
              </lfs>
              <lfs rowspan="3">
                  <row spediteur="Mustermann" bestellnr="SJT05003G" lfsnr="1722846" datum="2006-08-28T00:00:00" ziel="Köln" lfs_refnr="1722846" lfs_emenge="Rm" lfsGuid="d36f37b26aa1f04e8a7993c9775238bd" lfs_transportnr="1722846" werksmassLUT="26.600" lmenge="20.000" pguid_ref="1d3b245ce4d95a4fa093a49c0e33f8b9" wmValid="3" punktName="9-9" holzart="Fi" sortierung="ISN" guete="" laenge="2.0">
                      <lmengeLfsUnit>20.00</lmengeLfsUnit>
                      <werksmass>13.14</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Fi, ISN, 2,00</sorte>
                  </row>
                  <row spediteur="Mustermann" bestellnr="SJT05003G" lfsnr="1722846" datum="2006-08-28T00:00:00" ziel="Köln" lfs_refnr="1722846" lfs_emenge="Rm" lfsGuid="d36f37b26aa1f04e8a7993c9775238bd" lfs_transportnr="1722846" werksmassLUT="26.600" lmenge="20.480" pguid_ref="e2b34e9dbe6d8640a3518c3719c7f5c4" wmValid="3" punktName="9-32" holzart="Fi" sortierung="ISN" guete="" laenge="2.0">
                      <lmengeLfsUnit>20.48</lmengeLfsUnit>
                      <werksmass>13.46</werksmass>
                      <betrag>0.00</betrag>
                      <sorte>Fi, ISN, 2,00</sorte>
                  </row>
                  <unit>Rm</unit>
                  <datum>2006-08-28</datum>
                  <wmunit>tl</wmunit>
                  <lmengeSumme>40.48</lmengeSumme>
                  <wmmenge>26.60</wmmenge>
                  <betrag>0.00</betrag>
              </lfs>
         </spediteur>
      
      Gibt es dafür eine alphanumerische Sortiermöglichkeit via XSL???

      Wäre Dir dankbar für Deinen Input!

      Gruss,

      FreezerSE

      Comment


      • #4
        Wenn nach Attributwerten sortiert werden soll, dann ändere den genannten Code in:

        Code:
        <xsl:sort data-type="text" select="row[1]/@spediteur"/>
        <xsl:sort data-type="text" select="row[1]/@lfsnr"/>
        Ob sich dabei row[1] als Ausgangspunkt zur Sortierung anbietet, überblicke ich nicht.

        Comment

        Working...
        X