Combine 2 nodes into one in XML using XSLT
Posted: Wed May 20, 2020 10:35 pm
Hello, I am new to XSLT. Tried hard but want help to combine two nodes using XSLT.
My XML has complex structure.
My Input XML:-
<Root id='1'>
<Nodes>
<Node id="D1">
<name>A1</name>
<Nodes>
<Node id="D1_B1">
<name>ABC</name>
<Nodes>
<Node id="D1_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D1_B2">
<name>ABC2</name>
<Nodes>
<Node id="D1_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
<Node id="D2">
<name>B1</name>
<Nodes>
<Node id="D2_B1">
<name>ABC</name>
<Nodes>
<Node id="D2_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D2_B2">
<name>ABC2</name>
<Nodes>
<Node id="D2_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
<Node id="D3">
<name>C1</name>
<Nodes>
<Node id="D3_B1">
<name>ABC</name>
<Nodes>
<Node id="D3_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D3_B2">
<name>ABC2</name>
<Nodes>
<Node id="D3_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
</Nodes>
</Root>
My desired Output XML should be -:
<Root id='1'>
<Nodes>
<Node id="D2">
<name>B1</name>
<Nodes>
<Node id="D2_B1">
<name>ABC</name>
<Nodes>
<Node id="D2_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D2_B2">
<name>ABC2</name>
<Nodes>
<Node id="D2_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
<Node id="D3">
<name>C1</name>
<Nodes>
<Node id="D3_B1">
<name>ABC</name>
<Nodes>
<Node id="D3_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D3_B2">
<name>ABC2</name>
<Nodes>
<Node id="D3_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
<Node id="D1">
<name>A1</name>
<Nodes>
<Node id="D1_B1">
<name>ABC</name>
<Nodes>
<Node id="D1_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D1_B2">
<name>ABC2</name>
<Nodes>
<Node id="D1_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
</Node>
</Nodes>
</Root>
I am not able to understand how to group and merge.
My XML has complex structure.
My Input XML:-
<Root id='1'>
<Nodes>
<Node id="D1">
<name>A1</name>
<Nodes>
<Node id="D1_B1">
<name>ABC</name>
<Nodes>
<Node id="D1_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D1_B2">
<name>ABC2</name>
<Nodes>
<Node id="D1_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
<Node id="D2">
<name>B1</name>
<Nodes>
<Node id="D2_B1">
<name>ABC</name>
<Nodes>
<Node id="D2_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D2_B2">
<name>ABC2</name>
<Nodes>
<Node id="D2_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
<Node id="D3">
<name>C1</name>
<Nodes>
<Node id="D3_B1">
<name>ABC</name>
<Nodes>
<Node id="D3_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D3_B2">
<name>ABC2</name>
<Nodes>
<Node id="D3_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
</Nodes>
</Root>
My desired Output XML should be -:
<Root id='1'>
<Nodes>
<Node id="D2">
<name>B1</name>
<Nodes>
<Node id="D2_B1">
<name>ABC</name>
<Nodes>
<Node id="D2_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D2_B2">
<name>ABC2</name>
<Nodes>
<Node id="D2_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
<Node id="D3">
<name>C1</name>
<Nodes>
<Node id="D3_B1">
<name>ABC</name>
<Nodes>
<Node id="D3_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D3_B2">
<name>ABC2</name>
<Nodes>
<Node id="D3_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
<Node id="D1">
<name>A1</name>
<Nodes>
<Node id="D1_B1">
<name>ABC</name>
<Nodes>
<Node id="D1_B1_BL1">
<name>ABCL</name>
</Node>
</Nodes>
</Node>
<Node id="D1_B2">
<name>ABC2</name>
<Nodes>
<Node id="D1_B2_BL2">
<name>ABC23</name>
</Node>
</Nodes>
</Node>
</Nodes>
</Node>
</Node>
</Nodes>
</Root>
I am not able to understand how to group and merge.