With the sample XML data I have, I want to ungroup the <rf> into 2 or 3 by grouping values of each <rec>
- recs/rec/addData/entry/key='CC'/value ;and
- recs/rec/addData/entry/key='Att'/value.
Thereby updating <rf id > , <CC> and <rec id> values using above concatenated values alongwith the unique number appearing at the end of the string so as to make them unique.
Also, while ungrouping , the <rec> should fall under corresponding <rf>.
For first <rf id="cc_5_Att_2_FamId_5811357">, the following recId 's have their recs/rec/addData/entry/key='CC'/value ='GNV' and recs/rec/addData/entry/key='Att'/value='BenJul' -RecId_6123671,
RecId_6123753,
RecId_6123917,
RecId_6123712,
RecId_6123958,
RecId_6123794,
RecId_5811892,
RecId_6123999,
RecId_6123835, and
RecId_6123876.
Therefore these rec id should be put into <rf> with newly generated id as <rf id ="GNV BenJulFamId_5811357"> and the CC vaule should be updated as <CC>GNV BenJul</CC>
and each <rec> should be updated as -
<rec id="GNV BenJul_RecId_6123671
<rec id="GNV BenJul_RecId_6123753
<rec id="GNV BenJul_RecId_6123917
<rec id="GNV BenJul_RecId_6123712
<rec id="GNV BenJul_RecId_6123958
<rec id="GNV BenJul_RecId_6123794
<rec id="GNV BenJul_RecId_5811892
<rec id="GNV BenJul_RecId_6123999
<rec id="GNV BenJul_RecId_6123835
<rec id="GNV BenJul_RecId_6123876
The remaining recid's of the first <rf id="cc_5_Att_2_FamId_5811357"> have their recs/rec/addData/entry/key='CC'/value ='GNV' and recs/rec/addData/entry/key='Att'/value='NicMar'--
RecId_5811597, RecId_5811869, RecId_5811520, RecId_5811950, RecId_5812102, RecId_5811730, RecId_5812078,
These rec id's should be put into <rf> with newly generated id as <rf id ="GNV NicMarFamId_5811357"> and the CC vaule should be updated as <CC>GNV NicMar</CC>
and each <rec> should should be updated as
<rec id="GNV NicMar_RecId_5811597
<rec id="GNV NicMar_RecId_5811869
<rec id="GNV NicMar_RecId_5811520
<rec id="GNV NicMar_RecId_5811950
<rec id="GNV NicMar_RecId_5812102
<rec id="GNV NicMar_RecId_5811730
<rec id="GNV NicMar_RecId_5812078
My Sample XML is -
<rfs>
<rf id="cc_5_Att_2_FamId_5811357">
<CC>cc_5_Att_2</CC>
<name>siRNA Knock Out assay method and constructs</name>
<ref>GAL-011</ref>
<recs>
<rec id="cc_5_Att_2_RecId_6123671">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>App</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>AT</cFiled>
<ref>GAL-011-AT-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_5811597">
<addData>
<entry>
<key>CS</key>
<value>Ed</value>
</entry>
<entry>
<key>IP</key>
<value>Leiden</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>NicMar</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>P</type>
<cFiled>US</cFiled>
<ref>GAL-011-US-PSP[2]</ref>
</rec>
<rec id="cc_5_Att_2_RecId_5811869">
<addData>
<entry>
<key>CS</key>
<value>A</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>NicMar</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>NORMAL</type>
<cFiled>CA</cFiled>
<ref>GAL-011-CA-PCT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_6123753">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>FR</cFiled>
<ref>GAL-011-FR-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_6123917">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>NL</cFiled>
<ref>GAL-011-NL-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_5811520">
<addData>
<entry>
<key>CS</key>
<value>Ee</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>NicMar</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>P</type>
<cFiled>US</cFiled>
<ref>GAL-011-US-PSP</ref>
</rec>
<rec id="cc_5_Att_2_RecId_6123712">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VD</type>
<cFiled>BE</cFiled>
<ref>GAL-011-BE-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_5811950">
<addData>
<entry>
<key>CS</key>
<value>A</value>
</entry>
<entry>
<key>IP</key>
<value>K</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>NicMar</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>N</type>
<cFiled>JP</cFiled>
<ref>GAL-011-JP-PCT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_6123958">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>Leiden</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>N</type>
<cFiled>CH</cFiled>
<ref>GAL-011-CH-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_6123794">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>DE</cFiled>
<ref>GAL-011-DE-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_5812102">
<addData>
<entry>
<key>CS</key>
<value>A</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>NicMar</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>CON</type>
<cFiled>US</cFiled>
<ref>GAL-011-US-CNT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_5811730">
<addData>
<entry>
<key>CS</key>
<value>A</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>NicMar</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>N</type>
<cFiled>WO</cFiled>
<ref>GAL-011-WO-PCT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_5811892">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>NORMAL</type>
<cFiled>EP</cFiled>
<ref>GAL-011-EP-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_6123999">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>GB</cFiled>
<ref>GAL-011-GB-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_6123835">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>IE</cFiled>
<ref>GAL-011-IE-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_6123876">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>LU</cFiled>
<ref>GAL-011-LU-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_5812078">
<addData>
<entry>
<key>CS</key>
<value>A</value>
</entry>
<entry>
<key>IP</key>
<value>L</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>NicMar</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>N</type>
<cFiled>US</cFiled>
<ref>GAL-011-US-NP</ref>
</rec>
</recs>
<keys>
<kw>
<name>Technology</name>
<type>Technology</type>
</kw>
<kw>
<name>Oncology (GLPG)</name>
<type>Alliance_Program</type>
</kw>
</keys>
<col>false</col>
<costMod>1.0</costMod>
</rf>
<rf id="cc_5_Att_2_FamId_5962036">
<CC>cc_5_Att_2</CC>
<name>Methods and Means for Treatment of Osteoarthritis</name>
<ref>GAL-099</ref>
<recs>
<rec id="cc_5_Att_2_RecId_205359668">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>NL</cFiled>
<ref>GAL-099-NL-ETD</ref>
</rec>
<rec id="cc_5_Att_2_RecId_6339136">
<addData>
<entry>
<key>CS</key>
<value>Ee</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>KurSer</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>P</type>
<cFiled>US</cFiled>
<ref>GAL-099-US-PSP</ref>
</rec>
<rec id="cc_5_Att_2_RecId_201785125">
<addData>
<entry>
<key>CS</key>
<value>A</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>KurSer</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>D</type>
<cFiled>US</cFiled>
<ref>GAL-099-US-PCD</ref>
</rec>
<rec id="cc_5_Att_2_RecId_203142672">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>D</type>
<cFiled>US</cFiled>
<ref>GAL-099-US-PCD[2]</ref>
</rec>
<rec id="cc_5_Att_2_RecId_205359581">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>BE</cFiled>
<ref>GAL-099-BE-ETD</ref>
</rec>
<rec id="cc_5_Att_2_RecId_205359752">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>FR</cFiled>
<ref>GAL-099-FR-ETD</ref>
</rec>
<rec id="cc_5_Att_2_RecId_201123283">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>NORMAL</type>
<cFiled>US</cFiled>
<ref>GAL-099-US-PCT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_205359835">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>DE</cFiled>
<ref>GAL-099-DE-ETD</ref>
</rec>
<rec id="cc_5_Att_2_RecId_203179552">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>DIV</type>
<cFiled>EP</cFiled>
<ref>GAL-099-EP-ETD</ref>
</rec>
<rec id="cc_5_Att_2_RecId_203073558">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>NORMAL</type>
<cFiled>JP</cFiled>
<ref>GAL-099-JP-PCD</ref>
</rec>
<rec id="cc_5_Att_2_RecId_201123156">
<addData>
<entry>
<key>CS</key>
<value>A</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>KurSer</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>NORMAL</type>
<cFiled>EP</cFiled>
<ref>GAL-099-EP-EPT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_205359920">
<addData>
<entry>
<key>CS</key>
<value>G</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>BenJul</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>VP</type>
<cFiled>GB</cFiled>
<ref>GAL-099-GB-ETD</ref>
</rec>
<rec id="cc_5_Att_2_RecId_201123239">
<addData>
<entry>
<key>CS</key>
<value>A</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>KurSer</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>NORMAL</type>
<cFiled>JP</cFiled>
<ref>GAL-099-JP-PCT</ref>
</rec>
<rec id="cc_5_Att_2_RecId_6517847">
<addData>
<entry>
<key>CS</key>
<value>Ed</value>
</entry>
<entry>
<key>IP</key>
<value>M</value>
</entry>
<entry>
<key>Div</key>
<value>GNV</value>
</entry>
<entry>
<key>CC</key>
<value>GNV</value>
</entry>
<entry>
<key>Att</key>
<value>KurSer</value>
</entry>
<entry>
<key>O</key>
<value>GNV</value>
</entry>
<entry>
<key>Appl</key>
<value>GNV</value>
</entry>
</addData>
<type>NORMAL</type>
<cFiled>WO</cFiled>
<ref>GAL-099-WO-PCT</ref>
</rec>
</recs>
<col>false</col>
<costMod>1.0</costMod>
</rf>
</rfs>
The XSLT is as follows :-
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="3.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
expand-text="yes">
<xsl:output method="xml" indent="yes"/>
<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="rfs">
<xsl:copy>
<xsl:for-each-group select="rf/recs/rec/addData" composite="true" group-by="entry[key = ('CC', 'Att')]/value">
<xsl:variable name="famId">
<xsl:value-of select="substring-after(substring-after(substring-after(substring-after(ancestor::rf/@id,'_'),'_'),'_'),'_')"></xsl:value-of>
</xsl:variable>
<xsl:variable name="id">
<xsl:value-of select="current-grouping-key()"></xsl:value-of>
</xsl:variable>
<xsl:variable name="finalFamId">
<xsl:value-of select="concat($id,$famId)"/>
</xsl:variable>
<rf id="{$finalFamId}">
<xsl:apply-templates select="ancestor::rf/addData" mode="subtree"/>
<CC>
<xsl:value-of select="$id"></xsl:value-of>
</CC>
<xsl:apply-templates select="ancestor::rf/name" mode="subtree"/>
<xsl:apply-templates select="ancestor::rf/reference" mode="subtree"/>
<xsl:apply-templates select="ancestor::rf/recs" mode="subtree"/>
<xsl:apply-templates select="ancestor::rf/col" mode="subtree"/>
<xsl:apply-templates select="ancestor::rf/costMod" mode="subtree"/>
</rf>
</xsl:for-each-group>
</xsl:copy>
</xsl:template>
<xsl:mode name="subtree" on-no-match="shallow-copy"/>
<xsl:template match="recs/rec" mode="subtree">
<xsl:if test=". intersect current-group()/..">
<xsl:for-each select=".">
<xsl:variable name="recid">
<xsl:value-of select="current-grouping-key()"></xsl:value-of>
</xsl:variable>
<xsl:variable name="origid">
<xsl:value-of select="substring-after(substring-after(substring-after(substring-after(@id,'_'),'_'),'_'),'_')"></xsl:value-of>
</xsl:variable>
<rec>
<xsl:attribute name="id">
<xsl:value-of select="$recid||'_'||$origid"/>
</xsl:attribute>
<xsl:apply-templates select="./addData" mode="subtree"/>
<xsl:apply-templates select="./ref" mode="subtree"/>
</rec>
</xsl:for-each>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
My desired output XML should look like is -
<rfs>
<rf id="GNV BenJulFamId_5811357">
<CC>GNV BenJul</CC>
<recs>
<rec id="GNV BenJul_RecId_6123671">
<rec id="GNV BenJul_RecId_6123753">
<rec id="GNV BenJul_RecId_6123917">
<rec id="GNV BenJul_RecId_6123712">
<rec id="GNV BenJul_RecId_6123958">
<rec id="GNV BenJul_RecId_6123794">
<rec id="GNV BenJul_RecId_5811892">
<rec id="GNV BenJul_RecId_6123999">
<rec id="GNV BenJul_RecId_6123835">
<rec id="GNV BenJul_RecId_6123876">
</recs
<rf id="GNV NicMarFamId_5811357">
<CC>GNV NicMar</CC>
<recs>
<rec id="GNV NicMar_RecId_5811597"/>
<rec id="GNV NicMar_RecId_5811869"/>
<rec id="GNV NicMar_RecId_5811520"/>
<rec id="GNV NicMar_RecId_5811950"/>
<rec id="GNV NicMar_RecId_5812102"/>
<rec id="GNV NicMar_RecId_5811730"/>
<rec id="GNV NicMar_RecId_5812078"/>
</recs>
</rf>
<rf id="GNV BenJulFamId_5962036">
<CC>GNV BenJul</CC>
<recs>
<rec id="GNV BenJul_RecId_205359668"/>
<rec id="GNV BenJul_RecId_203142672"/>
<rec id="GNV BenJul_RecId_205359581"/>
<rec id="GNV BenJul_RecId_205359752"/>
<rec id="GNV BenJul_RecId_201123283"/>
<rec id="GNV BenJul_RecId_205359835"/>
<rec id="GNV BenJul_RecId_203179552"/>
<rec id="GNV BenJul_RecId_203073558"/>
<rec id="GNV BenJul_RecId_205359920"/>
</recs>
</rf>
<rf id="GNV KurSer_FamId_5962036">
<CC>GNV KurSer</CC>
<recs>
<rec id="GNV KurSer_RecId_6339136"/>
<rec id="GNV KurSer_RecId_201785125"/>
<rec id="GNV KurSer_RecId_201123156"/>
<rec id="GNV KurSer_RecId_201123239"/>
<rec id="GNV KurSer_RecId_6517847"/>
</recs>
</rf>
</rfs>
Any help would be really appreciated. My XSLT is only grouping the first <rf> but not working for the rest of the xml.