<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes" />

   <xsl:key name="Qualifier" match="LIST/LIST_ST/REF" use="concat(count(../following-sibling::LIST_ST), Qualifier)" />

   <xsl:key name="LI-Qualifier" match="LIST/LIST_ST/LINEITEM/REF" use="concat(count(../following-sibling::LINEITEM/REF), Qualifier)" />

   <xsl:template match="/">
      <HTML>
         <HEAD>
            <TITLE>850</TITLE>
         </HEAD>

         <xsl:for-each select="LIST/LIST_ST">
            <BODY>
               <H3>Purchase Order Details</H3>

               <H2>
                  <xsl:value-of select="concat('Purchase Order ', position(), '-', BEG/PONumber)" />
               </H2>

               <table border="2" cellpadding="3" rules="all" bgcolor="#D8C454">
                  <TH>Qualifier</TH>

                  <TH>Code</TH>

                  <TH>Text</TH>

                  <xsl:for-each select="REF[generate-id(.) = generate-id( key('Qualifier', concat(count(../following-sibling::LIST_ST), Qualifier))[1]) ]">
                     <TR>
                        <TD>
                           <xsl:value-of select="Qualifier" />
                        </TD>

                        <TD>
                           <xsl:value-of select="Code" />
                        </TD>

                        <TD>
                           <xsl:variable name="group" select="key('Qualifier', concat(count(../following-sibling::LIST_ST), Qualifier))" />

                           <xsl:variable name="v1">
                              <xsl:for-each select="$group/Text">
                                 <xsl:value-of select="." />
                              </xsl:for-each>
                           </xsl:variable>

                           <xsl:value-of select="$v1" />
                        </TD>
                     </TR>
                  </xsl:for-each>
               </table>

               <xsl:for-each select="LINEITEM">
                  <xsl:variable name="ItemNumber1" select="ITEMNUMBER" />

                  <table border="2" cellpadding="3" rules="all" bgcolor="#D8C454">
                     <TH>Item number</TH>

                     <TH>Qualifier</TH>

                     <TH>Code</TH>

                     <TH>LINEITEM TEXT</TH>

                     <xsl:for-each select="REF[generate-id(.) = generate-id( key('LI-Qualifier', concat(count(../following-sibling::LINEITEM/REF), Qualifier))[1]) ]">
                        <TR>
                           <TD>
                              <xsl:value-of select="$ItemNumber1" />
                           </TD>

                           <TD>
                              <xsl:value-of select="Qualifier" />
                           </TD>

                           <TD>
                              <xsl:value-of select="Code" />
                           </TD>

                           <TD>
                              <xsl:variable name="group" select="key('LI-Qualifier', concat(count(../following-sibling::LINEITEM/REF), Qualifier))" />

                              <xsl:variable name="v1">
                                 <xsl:for-each select="$group/Text">
                                    <xsl:value-of select="." />
                                 </xsl:for-each>
                              </xsl:variable>

                              <xsl:value-of select="$v1" />
                           </TD>
                        </TR>
                     </xsl:for-each>
                  </table>
               </xsl:for-each>
            </BODY>
         </xsl:for-each>
      </HTML>
   </xsl:template>
</xsl:stylesheet>

