
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= collapseContexts ( SplitByValue( removeContexts(/srcRoot/srcSub/SrcItem))) |
Each Value |
|
/destRoot/destSub/destItem= SplitByValue( removeContexts(/srcRoot/srcSub/SrcItem))) |
Each Value |
Example
|
Source Instance |
Result |
|
<?xml version="1.0" encoding="UTF-8"?> <srcRoot> <srcSub> <srcItem> PID001 </srcItem> <srcItem> PID002 </srcItem> </srcSub> <srcSub> <srcItem> PID003 </srcItem> <srcItem> PID004 </srcItem> <srcItem> PID005 </srcItem> </srcSub> <srcSub> <srcItem> PID006 </srcItem> <srcItem> PID007 </srcItem> </srcSub> </srcRoot> |
<?xml version="1.0" encoding="UTF-8"?> <ns0:destRoot xmlns:ns0="workshopDemo"> <destSub> <destItem> PID001 </destItem> </destSub> <destSub> <destItem> PID002 </destItem> </destSub> <destSub> <destItem> PID003 </destItem> </destSub> <destSub> <destItem> PID004 </destItem> </destSub> <destSub> <destItem> PID005 </destItem> </destSub> <destSub> <destItem> PID006 </destItem> </destSub> <destSub> <destItem> PID007 </destItem> </destSub> </ns0:destRoot> |