I need to transform the incoming XML so that I can extract all “item” with “categorie” is equal “two” and move these into a separate “records” node with an attribute initialized as type=”two”.
Here’s a sample of the incoming XML.
<datafeed>
<records type="one">
<purchases>
<items>
<item>
<categorie>one</categorie>
<intrant>String</intrant>
</item>
<item>
<categorie>two</categorie>
<intrant>String</intrant>
</item>
<item>
<categorie>one</categorie>
<intrant>String</intrant>
</item>
<item>
<categorie>two</categorie>
<intrant>String</intrant>
</item>
</items>
</purchases>
</records>
<exchange/>
<context/>
<pilotage/>
</datafeed>
Here’s what I would like:
<datafeed>
<records type="one">
<purchases>
<items>
<item>
<categorie>one</categorie>
<intrant>String</intrant>
</item>
<item>
<categorie>one</categorie>
<intrant>String</intrant>
</item>
</items>
</purchases>
</records>
<records type="two">
<purchases>
<items>
<item>
<categorie>two</categorie>
<intrant>String</intrant>
</item>
<item>
<categorie>two</categorie>
<intrant>String</intrant>
</item>
</items>
</purchases>
</records>
<exchange/>
<context/>
<pilotage/>
</datafeed>
I now have two “records” both initialize with it’s predefined type (always one or two). The records that were extracted, were moved, hence deleted from the original record.
Thanks
This transformation:
when applied on the provided XML document, produces the wanted, correct result:
Do note:
The use and overriding of the identity rule.
How items of categorie “two” are excluded from processing by using an empty template matching them.
The use of keys for efficient and convenient locationg of items by categorie.