Aktuelle Remote-Seminare mit Durchführungsgarantie: Etwas Werbung in eigener Sache Termine: 21.09.-23.09.2020, 23.11.-25.11.2020, 07.12.-09.12.2020, 22.03.-24.03.2021, 07.06.-09.06.2021, 06.09.-08.09.2021XML Einführung und Grundlagen Termine: 20.10.2020, 13.11.2020, 10.12.2020, 25.03.2021, 10.06.2021, 09.09.2021XML - der professionelle Überblick Termine: 23.11.-26.11.2020, 29.03.-01.04.2021Einstieg in die Programmierung Termine: 14.12.-16.12.2020, 07.04.-09.04.2021XML, XSLT, XPath, XSL-FO Einführung Termine: Termin nach WunschEinstieg in C#.NET Termine: 21.09.-23.09.2020, 11.01.-13.01.2021, 26.05.-28.05.2021, 27.09.-29.09.2021VB.NET für Visual Basic-Programmierer Termine: 14.12.-16.12.2020, 08.03.-10.03.2021, 19.07.-21.07.2021, 23.08.-25.08.2021XML Grundlagen, XSL-FO, SVG, DocBook, DITA Termine: Termin nach WunschJava Grundlagen Termine: 30.11.-03.12.2020, 29.03.-01.04.2021C++ für Programmiereinsteiger Termine: 10.09.2020, 11.12.2020, 16.03.2021Neues Seminar: XProc Grundlagen Termine: 21.09.-25.09.2020, 01.03.-05.03.2021Java/JSP/HTML/JDBC/XML Komplett Termine: 07.09.-09.09.2020, 21.10.-23.10.2020, 23.11.-25.11.2020, 25.01.-27.01.2021, 12.04.-14.04.2021, 26.07.-28.07.2021Python für Programmiereinsteiger Last-Minute-Seminare, noch freie Plätze Python für Programmiereinsteiger07.09.-09.09.2020 XML Einführung und Grundlagen21.09.-23.09.2020 XML, XSLT, XPath, XSL-FO Einführung14.12.-16.12.2020

XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT * DIVERSES



XQuery / Sortierung einer Sequenz

Sortierung einer Sequenz

Sortierung einer Sequenz

➪ Mit order by ist auch die Sortierung einer Sequenz problemlos möglich.


<erg>
{
  for $x in ((1 to 10)[. mod 3 = 0], 'Holzflos')
  order by $x descending
  where $x castable as xs:decimal
  return 
    <WERT>     
      {$x}
    </WERT>
}
</erg>

Das Ergebnis dürfte wenig erstaunen:


<erg>
  <WERT>9</WERT>
  <WERT>6</WERT>
  <WERT>3</WERT>
</erg>

Freilich kann es passieren, dass die Sortierung nach einem String- erfolgt:


<erg>
{
  for $x in //Gehalt
  order by $x descending
  return 
    <WERT>     
      {$x/text()}
    </WERT>
}
</erg>

... wie Sie hier sehen können:


<erg>
   <WERT>987.58</WERT>
   <WERT>876.54</WERT>
   <WERT>777.77</WERT>
   <WERT>6789</WERT>
   <WERT>654.21</WERT>
   <WERT>546.77</WERT>
   <WERT>5430</WERT>
   <WERT>456</WERT>
   <WERT>456</WERT>
   <WERT>357</WERT>
   <WERT>3450</WERT>
   <WERT>333.33</WERT>
   <WERT>321.45</WERT>
   <WERT>321</WERT>
   <WERT>234.56</WERT>
   <WERT>234</WERT>
   <WERT>222</WERT>
   <WERT>135</WERT>
   <WERT>1234.56</WERT>
</erg>

Daher ist es in XQuery sinnvoll, jedes Item der relevanten Sequenz nach seinem gewünschten Datentyp zu behandeln. In diesem Fall wird jedes Item als xs:decimal gecastet.


<erg>
{
  for $x in //xs:decimal(Gehalt/text())
  order by $x descending
  return 
    <WERT>     
      {$x}
    </WERT>
}
</erg>

Damit sieht das Ergebnis auch hier besser aus:


<erg>
   <WERT>6789</WERT>
   <WERT>5430</WERT>
   <WERT>3450</WERT>
   <WERT>1234.56</WERT>
   <WERT>987.58</WERT>
   <WERT>876.54</WERT>
   <WERT>777.77</WERT>
   <WERT>654.21</WERT>
   <WERT>546.77</WERT>
   <WERT>456</WERT>
   <WERT>456</WERT>
   <WERT>357</WERT>
   <WERT>333.33</WERT>
   <WERT>321.45</WERT>
   <WERT>321</WERT>
   <WERT>234.56</WERT>
   <WERT>234</WERT>
   <WERT>222</WERT>
   <WERT>135</WERT>
</erg

Auch hier können sämtliche Möglichkeiten der -Funktion ausgeschöpft werden, um die Sortierkriterien individuell zu gestalten.


<erg>
{
  for $x in sort(//xs:decimal(Gehalt), '',  
      function($v){ if ($v < 300 ) 
                    then ( $v * 10 ) 
                    else ( $v ) })
  return 
    <WERT>     
      {$x}
    </WERT>
}
</erg>

Durch den internen Aufruf der werden jene Einzelwerte, die kleiner sind als 300, jeweils mit dem Faktor 10 multipliziert. Dadurch erhalten sie einen effektiven internen Sortierwert:


   135    -> 1350
   222    -> 2220
   234    -> 2340
   234.56 -> 2345.6

... mit der Folge, dass sich auch die Reihenfolge der Sortierung ändert:


<erg>
   <WERT>321</WERT>
   <WERT>321.45</WERT>
   <WERT>333.33</WERT>
   <WERT>357</WERT>
   <WERT>456</WERT>
   <WERT>456</WERT>
   <WERT>546.77</WERT>
   <WERT>654.21</WERT>
   <WERT>777.77</WERT>
   <WERT>876.54</WERT>
   <WERT>987.58</WERT>
   <WERT>1234.56</WERT>
   <WERT>135</WERT>
   <WERT>222</WERT>
   <WERT>234</WERT>
   <WERT>234.56</WERT>
   <WERT>3450</WERT>
   <WERT>5430</WERT>
   <WERT>6789</WERT>
</erg

wg / 5. April 2019



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/XQuery3.html