XML | XML-Schema | XPath | XSL-T | XSL-FO | XQuery | XProc | SVG |
XQuery / 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 / 2. Mai 2021
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de