Home
Über mich
Blog
Veröffentlichungen
IT-Trainings
Impressum


Generierung von 3erGruppen

Eine etwas komplexere Aufgabe ist die nach Einkommen absteigend sortierte, in Dreiergruppen angeordnete und numerierte Ausgabe von Vorname und Wohnort aller Menschen im Quelldokument.

"$allemenschen" ist die Liste aller Menschen im Quelldokument mit Vorname und Wohnort, nach Gehalt absteigend sortiert (Casting als decimal!), noch ohne Position.

"$numallemenschen" fügt der sortierten Liste "$allemenschen" eine Numerierung hinzu.

"$jederdritte" generiere eine neue Liste mit jedem dritten Element aus $numallemenschen. Dies ist Ausgangsbasis für eine Iteration über jeden Node in $jederdritte, jeweils wird ein Element gruppe mit Nr. erzeugt. Innerhalb dieser Gruppe wird der vorletzte, der vorhergehende und der aktuelle Node adressiert.

<root>{
let $allemenschen 
    as node()+ := (for $x in /Orte/Ort/Mensch 
    order by xs:decimal($x/Gehalt) descending 
    return <m vn="{$x/vorname/text()}"  
    ort="{$x/../name/text()}"/>)
let $numallemenschen 
    as node()+ := (for $x at $p in $allemenschen 
    return <m nr="{$p}" 
    vn="{$x/@vn}"  
    ort="{$x/@ort}"/>)
let $jederdritte 
    as node()+ := (for $m at $p in 
    $numallemenschen where $p mod 3 = 1 
    return $m)
for $x at $y in $jederdritte return 
<gruppe nr="{$y}">
<m1 nr="{$numallemenschen[$y*3-2]/@nr}" 
    vn="{$numallemenschen[$y*3-2]/@vn}" 
    ort="{$numallemenschen[$y*3-2]/@ort}"/>
<m2 nr="{$numallemenschen[$y*3-1]/@nr}" 
    vn="{$numallemenschen[$y*3-1]/@vn}" 
    ort="{$numallemenschen[$y*3-1]/@ort}"/>
<m3 nr="{$numallemenschen[$y*3]/@nr}" 
    vn="{$numallemenschen[$y*3]/@vn}" 
    ort="{$numallemenschen[$y*3]/@ort}"/>
</gruppe>
}
</root>

Das Ergebnis:

<root>
  <gruppe nr="1">
    <m1 nr="1" vn="Willi" ort="Kapstadt"/>
    <m2 nr="2" vn="Stefan" ort="Neustadt"/>
    <m3 nr="3" vn="Betty" ort="Kapstadt"/>
  </gruppe>
  <gruppe nr="2">
    <m1 nr="4" vn="Nicole" ort="Neustadt"/>
    <m2 nr="5" vn="Siggi" ort="Neustadt"/>
    <m3 nr="6" vn="Simone" ort="Darmstadt"/>
  </gruppe>
  <gruppe nr="3">
    <m1 nr="7" vn="Werner" ort="Darmstadt"/>
    <m2 nr="8" vn="Heini" ort="Neustadt"/>
    <m3 nr="9" vn="Horst" ort="Darmstadt"/>
  </gruppe>
  <gruppe nr="4">
    <m1 nr="10" vn="Karl" ort="Darmstadt"/>
    <m2 nr="11" vn="Lotte" ort="Kapstadt"/>
    <m3 nr="12" vn="Ludwig" ort="Darmstadt"/>
  </gruppe>
  <gruppe nr="5">
    <m1 nr="13" vn="Rudi" ort="Darmstadt"/>
    <m2 nr="14" vn="Stefan" ort="Neustadt"/>
    <m3 nr="15" vn="Susi" ort="Kapstadt"/>
  </gruppe>
  <gruppe nr="6">
    <m1 nr="16" vn="Hugo" ort="Neustadt"/>
    <m2 nr="17" vn="Rita" ort="Kapstadt"/>
    <m3 nr="18" vn="Martin" ort="Kapstadt"/>
  </gruppe>
  <gruppe nr="7">
    <m1 nr="19" vn="Liane" ort="Kapstadt"/>
    <m2 nr="" vn="" ort=""/>
    <m3 nr="" vn="" ort=""/>
  </gruppe>
</root>

qrpic/XQuery13.jpg

wg / 14. Oktober 2017




Fragen? Anmerkungen? Tips?

Bitte nehmen Sie Kontakt zu mir auf (info10@wilfried-grupe.de).



Vielen Dank für Ihr Interesse an meiner Arbeit.


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

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