Beispiel: Rückgabe eines Werts auf Basis einer Bedingung

www.altova.com Dieses Kapitel drucken Vorherige Seite Eine Ebene nach oben Nächste Seite

Startseite >  Erstellen von Mappings > Filter und Bedingungen >

Beispiel: Rückgabe eines Werts auf Basis einer Bedingung

In diesem Beispiel wird gezeigt, wie Sie einen einfachen Wert auf Basis einer true/false-Bedingung aus einer Komponente abrufen. Zu diesem Zweck wird eine If-Else-Bedingung ( mff_ic_if_else ) verwendet. If-Else-Bedingungen dürfen nicht mit Filterkomponenten verwechselt werden. If-Else-Bedingungen eignen sich nur, um einfache Werte (Strings, Ganzzahlen, usw.) auf Basis einer Bedingung zu verarbeiten. Wenn Sie komplexe Werte wie Nodes filtern müssen, verwenden Sie stattdessen einen Filter (siehe Beispiel: Filtern von Nodes).

 

Das in diesem Beispiel beschriebene Mapping befindet sich unter dem folgenden Pfad: %EXFOLDER%>ClassifyTemperatures.mfd.

mff_map_ClassifyTemperatures

In diesem Mapping werden aus einer XML-Quelldatei, die Temperaturdaten ("Temperatures") enthält, Daten ausgelesen und in eine XML-Zieldatei geschrieben, die demselben Schema entspricht. Zwischen der Ziel- und der Quellkomponente befinden sich einige weitere Komponenten. Eine davon ist die hier beschriebene if-else-Bedingung (rot markiert).

 

Ziel des Mappings ist es, zu jedem Temperaturdatensatz in der Zielkomponente eine kurze Beschreibung hinzuzufügen. Wenn die Temperatur mehr als 20 Grad Celsius ist, so soll die Beschreibung "high" lauten. Wenn die Temperatur weniger als 5 Grad Celsius ist, soll die Beschreibung "low" lauten. In allen anderen Fällen soll keine Beschreibung hinzugefügt werden.

 

Zu diesem Zweck benötigen wir eine bedingte Verarbeitung. Um dies zu erreichen, wurde eine If-Else-Bedingung zum Mapping hinzugefügt. (Um eine If-Else-Bedingung hinzuzufügen, klicken Sie auf das Menü Einfügen und wählen Sie den Befehl If-Else-Bedingung.). Die If-Else-Bedingung in diesem Mapping wurde (mittels der Schaltfläche gui_add_function_parameter) erweitert, um zwei Bedingungen Platz zu bieten: bool1 und bool2.

 

Die Bedingungen selbst werden von den aus der MapForce Core-Bibliothek hinzugefügten Funktionen greater und less bereitgestellt (nähere Informationen dazu finden Sie unter Arbeiten mit Funktionen). Diese Funktionen werten die von den beiden Input-Komponenten "upper" und "lower" bereitgestellten Werte aus. (Um eine Input-Komponente hinzuzufügen, klicken Sie auf das Menü Einfügen und anschließend auf Input-Komponente einfügen. Nähere Informationen zu Input-Komponenten finden Sie unter Bereitstellen von Parametern für das Mapping.)

 

Die Funktionen greater und less geben entweder true oder false zurück. Vom Ergebnis der Funktion ist es abhängig, was in die Zielinstanz geschrieben wird. Wenn also der Wert des Attributs "temp" in der Quellkomponente größer als 20 ist, so wird der Konstantenwert "high" an die if-else-Bedingung übergeben. Wenn der Wert des Attributs "temp" in der Quellkomponente kleiner als 5 ist, so wird der Konstantenwert "low" an die if-else-Bedingung übergeben. Der otherwise-Input wird nicht verbunden. Wenn daher keine der obigen Bedingungen zutrifft, wird nichts an den result-Output-Konnektor übergeben.

 

Der result Output-Konnektor übergibt schließlich diesen Wert (einmal für jeden Temperaturdatensatz) an das Attribut "desc" in der Zielkomponente.

 

Wenn Sie fertig sind, klicken Sie auf das Register Ausgabe, um eine Vorschau auf das Mapping-Ergebnis zu sehen. Beachten Sie, dass die erzeugte XML-Ausgabe nun in allen Nodes, in denen "temperature" größer als 20 oder kleiner als 5 ist, das Attribut "desc" enthält.

 

...  
  <data temp="-3.6" month="2006-01" desc="low"/>
  <data temp="-0.7" month="2006-02" desc="low"/>
  <data temp="7.5" month="2006-03"/>
  <data temp="12.4" month="2006-04"/>
  <data temp="16.2" month="2006-05"/>
  <data temp="19" month="2006-06"/>
  <data temp="22.7" month="2006-07" desc="high"/>
  <data temp="23.2" month="2006-08" desc="high"/>
...

XML-Ausgabe nach Ausführung des Mappings


© 2019 Altova GmbH