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


Arbeiten mit Namespaces und Functions

Es kommt häufiger vor, daß aus separaten XML Dateien gezielt Werte ausgelesen und in andere Logiken übernommen werden müssen. Zu diesem Zweck habe ich hier ein etwas ausführlicheres Beispiel, das neben einer speziellen Function auch die dazugehörigen Variablen und Namespaces enthält.

<?xml version="1.0" encoding="ISO-8859-1"?>
<Listen>
 <Liste Listnr="1">
  <Wert Key="2">3</Wert>
  <Wert Key="5">15</Wert>
  <Wert Key="15">450</Wert>
  <Default>0</Default>
 </Liste>
</Listen>

Die Function "wg:getValue" erhält zwei xs:string-Parameter: "$listnumber" und "$key". Sie liest die externe XML-Datei "$wg:externList" ein, prüft dort, ob das Attribut "Listnr" mit dem Parameter "$listnumber" und ob ein Attribut "Key" mit dem Parameter "$key" übereinstimmen. Falls ja, wird der jeweilige Wert ermittelt; falls nein, wird auf "Error" oder "Default" geprüft.

(: definiere einen Namespace :)
declare namespace wg="http://www.wilfried-grupe.de/xquery/functions";
(: definiere eine xs:string - Variable :)
declare variable $wg:document-uri 
as xs:string := "C:/wg/Listen.xml";
(: definiere eine Variable, 
die ein komplettes XML Dokument einliest :)
declare variable $wg:externList 
as document-node() := doc($wg:document-uri);
(: definiere eine Function, 
die zwei xs:string-Parameter enthaelt 
und aus $wg:externList Werte einliest :)
declare function wg:getValue(
                 $listnumber as xs:string, 
                 $key as xs:string) {
if (exists( $wg:externList/Listen
                 /Liste[@Listnr = $listnumber]
                 /Wert[@Key = $key]) )
then (
        for $p in $wg:externList/Listen
                 /Liste[@Listnr = $listnumber]
                 /Wert[@Key = $key]
        return $p/text()
)
else if (exists( $wg:externList/Listen
                 /Liste[@Listnr = $listnumber]/Error) )
then (
        for $p in $wg:externList/Listen
                 /Liste[@Listnr = $listnumber]/Error
        return $p/text()
)
else (
        for $p in $wg:externList/Listen
                 /Liste[@Listnr = $listnumber]/Default
        return $p/text()
)
};
<wg:erg>
{wg:getValue("1", "99")}
</wg:erg>

Der Aufruf "{wg:getValue("1", "99")}" ergibt "0", weil kein "Key"-Attribut den Wert "99" besitzt:

<wg:erg 
   xmlns:wg="http://www.wilfried-grupe.de/xquery/functions"
   >0</wg:erg>

qrpic/XQuery14.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