Grouping XML Element

31 Views Asked by At

This is the input xml. I want to group by store(Id) = RS0001035 as in the xml using XSLT 1 version. Though in this example, store(Id) = same throughout the the payload provided below but it can be different input from time to time.

<storeInfo>
    <store_list>
       <r_store>
          <f>
              <store>RS0001035</store>
           </f>
        </r_store>
       <r_qty>
         <d>
            <f>
                 <qty_OnHand>1</qty_OnHand>
                 <qty_MinMax>2</qty_MinMax>
              </f>
           </d>
        </r_qty>
       <r_part>
         <d>
            <f>
                 <part>0000003AB</part>
                 <part_sub>0000003BC</part_sub>
              </f>
           </d>
        </r_part>
     </store_list>
    <store_list>
      <r_store>
        <f>
              <store>RS0001035</store>
           </f>
        </r_store>
      <r_qty>
         <d>
            <f>
                 <qty_OnHand>0</qty_OnHand>
                 <qty_MinMax>3</qty_MinMax>
              </f>
           </d>
        </r_qty>
       <r_part>
         <d>
            <f>
                 <part>0000003CD</part>
                 <part_sub>0000003EF</part_sub>
              </f>
           </d>
        </r_part>
     </store_list>
   <store_list>
      <r_store>
         <f>
              <store>RS0001035</store>
           </f>
        </r_store>
        <r_qty>
         <d>
            <f>
                 <qty_OnHand>3</qty_OnHand>
                 <qty_MinMax>3</qty_MinMax>
              </f>
           </d>
        </r_qty>
       <r_part>
         <d>
            <f>
                 <part>0000003GH</part>
                 <part_sub>0000003IJ</part_sub>
              </f>
           </d>
        </r_part>
     </store_list>
  </storeInfo>

The output will look like this. The output will be grouped by store(Id) : RS0001035. Then the store_list will show up store_list with part and quantity information rolled under the store(Id): RS0001035.

 <storeInfo>
    <store>RS0001035</store>
    <store_list>
       <part>0000003AB</part>
       <part_sub>0000003BC</part_sub>
       <qty_OnHand>1</qty_OnHand>
       <qty_MinMax>2</qty_MinMax>
     </store_list>
        <store_list>
       <part>0000003AB</part>
       <part_sub>0000003BC</part_sub>
       <qty_OnHand>0</qty_OnHand>
       <qty_MinMax>3</qty_MinMax>
     </store_list>
      <store_list>
       <part>0000003AB</part>
       <part_sub>0000003BC</part_sub>
       <qty_OnHand>3</qty_OnHand>
       <qty_MinMax>3</qty_MinMax>
     </store_list>
 </storeInfo>

I am not that great at XSLT as I am a beginner. Here is my code.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<storeInfo>
<xsl:for-each select="/storeInfo/store_list">
<store>
<xsl:value-of   select="."/>
</store>
</xsl:for-each>
<xsl:for-each select="/storeInfo/store_list">
<store_list>
<part>
<xsl:value-of   select="./r_part/d/f/part"/>
</part>
<part_sub>
<xsl:value-of   select="./r_part/d/f/part_sub"/>
</part_sub>
<qty_OnHand>
<xsl:value-of   select="./r_qty/d/f/qty_OnHand"/>
</qty_OnHand>
<qty_MinMax>
<xsl:value-of   select="./r_qty/d/f/qty_MinMax"/>
</qty_MinMax>
</store_list>
</xsl:for-each>
</storeInfo>
</xsl:template>
</xsl:stylesheet>
0

There are 0 best solutions below