Skip to main content Skip to complementary content

Reusing an existing loop expression

Use a LoopReference function to reuse a loop expression previously defined in another element.

Before you begin

You have created a map with an input and an output structure. You can use the samples provided below.

About this task

In this example, you have an XML file containing customer information. Each customer element contains the customer's name and their state. You want to create an XML output in which the customers are grouped by state. You can use the following XML sample as input:
<customers>
	<customer>
		<lastName>Harrison</lastName>
		<firstName>Emily</firstName>
		<state>New Jersey</state>
	</customer>
	<customer>
		<lastName>Reagan</lastName>
		<firstName>James</firstName>
		<state>New Jersey</state>
	</customer>
	<customer>
		<lastName>Smith</lastName>
		<firstName>Karen</firstName>
		<state>Texas</state>
	</customer>
</customers>
You can use the following XML sample to create your output structure:
<root>
	<customers>
		<state/>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
	</customers>
	<customers>
		<state/>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
		<customer>
			<lastName/>
			<firstName/>
		</customer>
	</customers>
</root>

Procedure

  1. Right-click the output customers element and click Split Loop to create a separate loop for each state value.
    Creation of separate loops.
  2. Click the first customers loop in the output structure and place a FixedLoop function in its Loop tab.
    This is used to indicate that the output should only produce one iteration of this loop.
  3. Place a Constant function on the first output state element, then double-click the function, enter New Jersey in the Value field and click OK.
  4. Place the input customer element on the first output customer element.
    A SimpleLoop function is automatically added.
  5. Place an Equal function on the Filter argument of the SimpleLoop.
  6. Place the input state element on the First Value argument and the first output state on the Second Value.
    Placement of elements.
  7. Click the customers[2] element and place a FixedLoop function in its Loop tab.
  8. Place a Constant function on the second output state element and set its value to Texas.
  9. Click the second output customer loop and place a LoopReference function in its Loop tab.
  10. Place the first output customer loop on the Map Element argument.
    This allows you to specify that the loop used in this element should be the same as the one defined in the first customer element. Unlike the LoopCopy function, the LoopReference does not apply the filters or sort keys defined in the referenced loop.
  11. Add an Equal function to the Filter argument and set the input state as First Value and the second output state as Second Value.
  12. Place the input customer element on the second output customer to map the child elements.

Results

Your map is configured and looks like this:
Map result.
You can use the Test Run feature to see the result. In this example, the following output is returned:
<root>
  <customers>
    <state>New Jersey</state>
    <customer>
      <lastName>Harrison</lastName>
      <firstName>Emily</firstName>
    </customer>
    <customer>
      <lastName>Reagan</lastName>
      <firstName>James</firstName>
    </customer>
  </customers>
  <customers>
    <state>Texas</state>
    <customer>
      <lastName>Smith</lastName>
      <firstName>Karen</firstName>
    </customer>
  </customers>
</root>

Did this page help you?

If you find any issues with this page or its content – a typo, a missing step, or a technical error – please let us know!