collapseContexts()copies the first value from all contexts to one context. Empty contexts are replaced with an empty string.
This can be useful if an upper-level node is to be created each time a lower-level node exists, for example. The function is useful in combination with the function SplitByValue().
In the following example, a separate upper-level element <destSub> is to be created in the target structure for each occurrence of element <srcItem>:
Source Structure (Left) and Target Structure (Right)
Field Name |
minOccurs |
maxOccurs |
Field Name |
minOccurs |
maxOccurs |
srcRoot |
1 |
1 |
destRoot |
1 |
1 |
srcSub |
0 |
unbounded |
destSub |
0 |
unbounded |
srcItem |
0 |
unbounded |
destItem |
0 |
unbounded |
This is achieved by using a combination of the functions SplitByValue() and collapseContexts(). To create a queue for <destItem> in which a context change is performed after each value, use removeContexts() and SplitByValue(). To create a queue with exactly as many context changes, but with empty values (the aim is to create the same number of upper-level tags without values), apply collapseContexts() to the same nesting of functions:
Message Mapping with collapseContexts() and SplitByValue()
Target Field Mapping |
Value of SplitByValue() |
/destRoot=/srcRoot |
|
/destRoot/destSub= |
Each Value |
/destRoot/destSub/destItem= |
Each Value |
Source Instance |
Result |
<?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> |