XQuery / XQuery: Element-Konstruktor

XQuery: Element-Konstruktor

XQuery: Element-Konstruktor

➪ In der Programmierpraxis mit XQuery kann es vorkommen, dass Elemente zur Laufzeit generiert werden müssen. Hier leistet der Element-Konstruktor große Hilfe.

Das folgende Beispiel berechnet in der temporären Variablen $schnitt einen Durchschnitt sämtlicher //Kauf/Gesamt-Nodes. In der folgenden Logik wird jeder einzelne relevante Kauf/Gesamt-Node mit $schnitt abgeglichen. Ist der Betrag grösser als $schnitt, so wird ein Element mehr generiert; andernfalls weniger. Hierbei kommt der Element-Konstruktor zum Einsatz.


let $input   := doc("C:/wg/Ort_Elemente.xml")
let $schnitt := avg($input//Kauf/Gesamt)
return
<erg schnitt="{$schnitt}">
  {
    for $b in $input/Orte/Ort[1]/Mensch[position() < 3]
    return
      <kunde NN="{$b/name/text()}" 
             VN="{$b/vorname/text()}" 
             WO="{$b/../name/text()}">
          {
            for $ges in $b/Kauf/Gesamt
            return
              if (xs:decimal($ges) > $schnitt)
              then
                element mehr {$ges/text()}
              else
                element weniger {$ges/text()}
          }
      </kunde>
  }
</erg>

Im Ergebnis finden Sie noch Einzelwerte wie <weniger>181.92999999999998</weniger>. Der Grund ist, dass der Wert im XML-Input-Dokument genau so definiert ist. Ein Type-Casting als xs:decimal wäre hier wirkungslos geblieben.


<erg schnitt="312.81">
  <kunde NN="Holzflos" 
         VN="Hugo" 
         WO="Neustadt">
    <weniger>38.97</weniger>
    <weniger>116.91</weniger>
    <weniger>103.92</weniger>
    <weniger>233.91</weniger>
    <weniger>233.91</weniger>
    <weniger>207.92</weniger>
    <weniger>207.92</weniger>
    <mehr>1209.84</mehr>
    <mehr>1209.84</mehr>
  </kunde>
  <kunde NN="Nixlos" 
         VN="Nicole" 
         WO="Neustadt">
    <weniger>207.92</weniger>
    <weniger>181.92999999999998</weniger>
    <weniger>155.94</weniger>
    <weniger>129.95</weniger>
    <weniger>103.96</weniger>
    <weniger>103.96</weniger>
    <weniger>77.97</weniger>
  </kunde>
</erg>

wg / 15. September 2018



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.




XQuery

FLOWR



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/XQuery10.html