!--a11y-->
collapseContexts 
Durch die Anwendung von collapseContexts() werden jeweils die ersten Werte aller Kontexte in einen Kontext aufgenommen. Leere Kontexte werden durch einen leeren String ersetzt:

Die kann zum Beispiel sinnvoll sein, wenn jedesmal ein übergeordneter Knoten erzeugt werden soll, wenn es einen untergeordneten Knoten gibt. Die Funktion ist in Kombination mit der Funktion SplitByValue() nützlich.
In dem folgenden Beispiel soll für jedes auftretende Element <srcItem>ein eigenes übergeordnetes Element <destSub> in der Zielstruktur erzeugt werden:
Ausgangsstruktur (links) und Zielstruktur (rechts)
Feldname |
minOccurs |
maxOccurs |
Feldname |
minOccurs |
maxOccurs |
srcRoot |
1 |
1 |
destRoot |
1 |
1 |
srcSub |
0 |
unbounded |
destSub |
0 |
unbounded |
srcItem |
0 |
unbounded |
destItem |
0 |
unbounded |
Sie erreichen dies über eine Kombination der Funktionen SplitByValue() und collapseContexts(). Um für <destItem>eine Queue zu erzeugen, in der ein Kontextwechsel nach jedem Wert stattfindet, verwenden Sie removeContexts() und SplitByValue(). Um eine Queue mit genauso vielen Kontextwechseln zu erzeugen, allerdings mit leeren Werten (Ziel ist es ja, genauso viele übergeordnete Tags ohne Wert zu erzeugen), wenden Sie auf die gleiche Schachtelung von Funktionen schließlich noch collapseContexts() an:
Message-Mapping mit collapseContexts() und SplitByValue()
Zielfeld-Mapping |
Wert von SplitByValue() |
/destRoot=/srcRoot |
|
/destRoot/destSub= |
Each Value |
/destRoot/destSub/destItem= |
Each Value |
Ausgangs-Instanz |
Ergebnis |
<?xml version="1.0"
<srcRoot> <srcSub> <srcItem> </srcSub> <srcItem> </srcSub> <srcItem> </srcSub> </srcRoot> |
<?xml version="1.0" encoding="UTF-8"?>
<ns0:destRoot <destSub> <destItem> </destSub> <destSub> <destItem> </destSub> <destSub> <destItem> </destSub> <destSub> <destItem> </destSub> <destSub> <destItem> </destSub> <destSub> <destItem> </destSub> <destSub> <destItem> </destSub>
</ns0:destRoot> |