xsl-list
[Top] [All Lists]

[xsl] Writer needs help in generalizing stylesheet

2007-01-09 08:56:31
This message was sent to my email address. I believe it should have been sent 
to the XSL list for general review, so I'm forwarding it. The original writer's 
email address appears below.

paykoff(_at_)mail(_dot_)ru


My problem in unsteady XML. Only I can know that my XML has next 
structure (example)
*
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type='text/xsl' href='New Text Document.xsl'?>
<notice><records><record>
<row>
  <VALUE>ST_ARGUI_SYNCH</VALUE>
  <pivot1>

<item>
<pivotrow>Closed</pivotrow>
<pivotcol>1.0.0.5</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Closed</pivotrow>
<pivotcol>4.0.3.5</pivotcol>
<TOTALS>22</TOTALS>
</item>

<item>
<pivotrow>Closed</pivotrow>
<pivotcol>4.0.3.x</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Closed</pivotrow>
<pivotcol>4.0.4.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Closed</pivotrow>
<pivotcol>4.0.5.0</pivotcol>
<TOTALS>7</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>1.0.0.5</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.0.3.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.0.3.1</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.0.3.2</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.0.3.5</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.0.3.x</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.0.4.0</pivotcol>
<TOTALS>9</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.0.5.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Fixed</pivotrow>
<pivotcol>4.0.3.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Fixed</pivotrow>
<pivotcol>4.0.3.3</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Fixed</pivotrow>
<pivotcol>4.0.3.5</pivotcol>
<TOTALS>3</TOTALS>
</item>

<item>
<pivotrow>Fixed</pivotrow>
<pivotcol>4.0.4.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Fixed</pivotrow>
<pivotcol>4.0.5.0</pivotcol>
<TOTALS>5</TOTALS>
</item>

<item>
<pivotrow>Fixed</pivotrow>
<pivotcol>4.0.5.x</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.0.0.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.0.1.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.0.3.5</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.0.4.0</pivotcol>
<TOTALS>12</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.0.5.0</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>N/A</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Open</pivotrow>
<pivotcol>4.0.5.0</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Reviewed</pivotrow>
<pivotcol>4.0.5.0</pivotcol>
<TOTALS>3</TOTALS>
</item>

</pivot1>
  <pivot2>

<item>
<pivotrow>Critical</pivotrow>
<pivotcol>4.0.3.5</pivotcol>
<TOTALS>3</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>1.0.0.5</pivotcol>
<TOTALS>3</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.0.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.1.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.3.0</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.3.1</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.3.2</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.3.3</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.3.5</pivotcol>
<TOTALS>26</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.3.x</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.4.0</pivotcol>
<TOTALS>23</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.5.0</pivotcol>
<TOTALS>20</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.5.x</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>N/A</pivotcol>
<TOTALS>2</TOTALS>
</item>

</pivot2>

</row>

<row>
  <VALUE>ST_COMMONPROD_SYNCH</VALUE>
  <pivot1>

<item>
<pivotrow>Closed</pivotrow>
<pivotcol>4.1.2.0</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.0.1.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.0.1.23</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.1.0.21</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.1.0.X</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.1.1.2</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.1.1.4</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.1.1.6</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.1.1.X</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>4.1.2.0</pivotcol>
<TOTALS>5</TOTALS>
</item>

<item>
<pivotrow>Evaluated</pivotrow>
<pivotcol>N/A</pivotcol>
<TOTALS>3</TOTALS>
</item>

<item>
<pivotrow>Fixed</pivotrow>
<pivotcol>4.1.0.9</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Implemented</pivotrow>
<pivotcol>4.1.2.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Loaded</pivotrow>
<pivotcol>4.1.2.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Loaded</pivotrow>
<pivotcol>4.1.2.X</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Loaded</pivotrow>
<pivotcol>N/A</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.0.1.23</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.0.1.X</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.1.0.X</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.1.1.4</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.1.2.0</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>4.1.2.X</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>New</pivotrow>
<pivotcol>N/A</pivotcol>
<TOTALS>3</TOTALS>
</item>

<item>
<pivotrow>Open</pivotrow>
<pivotcol>4.1.0.19</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Open</pivotrow>
<pivotcol>4.1.1.4</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Open</pivotrow>
<pivotcol>4.1.2.X</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Reviewed</pivotrow>
<pivotcol>N/A</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Tested</pivotrow>
<pivotcol>4.0.2.10</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Tested</pivotrow>
<pivotcol>4.1.0.21</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Tested</pivotrow>
<pivotcol>4.1.0.8</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Tested</pivotrow>
<pivotcol>4.1.1.4</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Tested</pivotrow>
<pivotcol>4.1.2.0</pivotcol>
<TOTALS>6</TOTALS>
</item>

<item>
<pivotrow>Tested</pivotrow>
<pivotcol>4.1.2.1</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Tested</pivotrow>
<pivotcol>4.1.2.X</pivotcol>
<TOTALS>3</TOTALS>
</item>

<item>
<pivotrow>Tested</pivotrow>
<pivotcol>N/A</pivotcol>
<TOTALS>2</TOTALS>
</item>

</pivot1>
  <pivot2>

<item>
<pivotrow>Critical</pivotrow>
<pivotcol>N/A</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.1.0</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.1.23</pivotcol>
<TOTALS>3</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.1.X</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.0.2.10</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.0.19</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.0.21</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.0.8</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.0.9</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.0.X</pivotcol>
<TOTALS>2</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.1.2</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.1.4</pivotcol>
<TOTALS>5</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.1.6</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.1.X</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.2.0</pivotcol>
<TOTALS>17</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.2.1</pivotcol>
<TOTALS>1</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>4.1.2.X</pivotcol>
<TOTALS>6</TOTALS>
</item>

<item>
<pivotrow>Non Critical</pivotrow>
<pivotcol>N/A</pivotcol>
<TOTALS>9</TOTALS>
</item>

</pivot2>
   
</row>

</record></records></notice>

*And i have next XSL template (for XML written above):*

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:key name="b" match="pivotrow" use="."/>
<xsl:key name="c" match="pivotcol" use="."/>
<xsl:template match="/">
<xsl:for-each select="/notice/records/record/row">
  <br/>
  <xsl:value-of select="VALUE"/>
<xsl:for-each select="pivot1">           
      <table border="1" cellspacing="0" class="stn">
          <tr>
            <th>*</th>
            <xsl:for-each select="item/pivotrow">
              <xsl:sort select="."/>
              <xsl:variable name="vpivotrow" select="."/>
              <th>
                <xsl:value-of select="."/>
              </th>
            </xsl:for-each>
            <th>total</th>
          </tr>
        <xsl:for-each 
select="item/pivotcol[generate-id(.)=generate-id(key('c',.)[1])]">
          <xsl:sort select="."/>
          <xsl:variable name="vpivotcol" select="."/>
          <tr>
            <th><xsl:value-of select="."/></th>
            <xsl:for-each 
select="../../item/pivotrow[generate-id(.)=generate-id(key('b',.)[1])]">
              <xsl:variable name="vpivotrow" select="."/>
              <td>
                <xsl:if test="not(../../item[pivotcol=$vpivotcol and 
pivotrow=$vpivotrow])">-</xsl:if>
                <xsl:if test="../../item[pivotcol=$vpivotcol and 
pivotrow=$vpivotrow]"><xsl:value-of 
select="../../item[pivotcol=$vpivotcol and 
pivotrow=$vpivotrow]/TOTALS"/></xsl:if>
              </td>
            </xsl:for-each>
            <td><xsl:value-of 
select="sum(../../item[pivotcol=$vpivotcol]/TOTALS)"/></td>
          </tr>
        </xsl:for-each>
          <tr>
            <th>total</th>
            <xsl:for-each 
select="item/pivotrow[generate-id(.)=generate-id(key('b',.)[1])]">
              <xsl:sort select="."/>
              <xsl:variable name="vpivotrow" select="."/>
              <td>
                <xsl:value-of 
select="sum(../../item[pivotrow=$vpivotrow]/TOTALS)"/>
              </td>
            </xsl:for-each>
            <td><xsl:value-of select="sum(item/TOTALS)"/></td>
          </tr>
      </table>
</xsl:for-each>

<xsl:for-each select="pivot2">           
      <table border="1" cellspacing="0" class="stn">
          <tr>
            <th>*</th>
            <xsl:for-each select="item/pivotrow">
              <xsl:sort select="."/>
              <xsl:variable name="vpivotrow" select="."/>
              <th>
                <xsl:value-of select="."/>
              </th>
            </xsl:for-each>
            <th>total</th>
          </tr>
        <xsl:for-each 
select="item/pivotcol[generate-id(.)=generate-id(key('c',.)[1])]">
          <xsl:sort select="."/>
          <xsl:variable name="vpivotcol" select="."/>
          <tr>
            <th><xsl:value-of select="."/></th>
            <xsl:for-each 
select="../../item/pivotrow[generate-id(.)=generate-id(key('b',.)[1])]">
              <xsl:variable name="vpivotrow" select="."/>
              <td>
                <xsl:if test="not(../../item[pivotcol=$vpivotcol and 
pivotrow=$vpivotrow])">-</xsl:if>
                <xsl:if test="../../item[pivotcol=$vpivotcol and 
pivotrow=$vpivotrow]"><xsl:value-of 
select="../../item[pivotcol=$vpivotcol and 
pivotrow=$vpivotrow]/TOTALS"/></xsl:if>
              </td>
            </xsl:for-each>
            <td><xsl:value-of 
select="sum(../../item[pivotcol=$vpivotcol]/TOTALS)"/></td>
          </tr>
        </xsl:for-each>
          <tr>
            <th>total</th>
            <xsl:for-each 
select="item/pivotrow[generate-id(.)=generate-id(key('b',.)[1])]">
              <xsl:sort select="."/>
              <xsl:variable name="vpivotrow" select="."/>
              <td>
                <xsl:value-of 
select="sum(../../item[pivotrow=$vpivotrow]/TOTALS)"/>
              </td>
            </xsl:for-each>
            <td><xsl:value-of select="sum(item/TOTALS)"/></td>
          </tr>
      </table>
</xsl:for-each>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>

*As result i have next sequence of tables
    first table - right result!
    second table - receive table which rows and cols non-recurrent with 
                                 first table but tables have 
intersection cols and rows
    third table - **receive table which rows and cols non-recurrent with 
                                     first and second tables ETC

So this is my problem :(  Maybe problem in keys?


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>