This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Regarding XSL performance on AIX


Hi,
I am performing a server side XSL (using java TransformerFactory classes) on the following XML.
<?xml:stylesheet type="text/xsl" href="Hierarchy.xsl" version="1.0" encoding="UTF-8"?>

<!-- <?xml version="1.0" encoding="UTF-8"?> -->

<NODE1>
<NODEADDRESS>1</NODEADDRESS> 
<LEVELIDENTIFIER>1</LEVELIDENTIFIER> 
<NODENAME>STOP AND SHOP                      </NODENAME> 
<ISGREY>0</ISGREY> 
<NODE2> 
<NODEADDRESS>1:1</NODEADDRESS> 
<LEVELIDENTIFIER>2</LEVELIDENTIFIER> 
<NODENAME>GROCERY                            </NODENAME> 
<ISGREY>1</ISGREY> 
<NODE3> 
<NODEADDRESS>1:1:1</NODEADDRESS> 
<LEVELIDENTIFIER>3</LEVELIDENTIFIER> 
<NODENAME>GROCERY OTHER                      </NODENAME> 
<ISGREY>0</ISGREY> 
<NODE4> 
<NODEADDRESS>1:1:1:1</NODEADDRESS> 
<LEVELIDENTIFIER>5</LEVELIDENTIFIER> 
<NODENAME>GRATED CHEESE                      </NODENAME> 
<ISGREY>1</ISGREY> 
</NODE4> 


120 records of type Node 4

<NODE4> 
<NODEADDRESS>1:1:1:128</NODEADDRESS> 
<LEVELIDENTIFIER>5</LEVELIDENTIFIER> 
<NODENAME>IRISH FOODS                        </NODENAME> 
<ISGREY>0</ISGREY> 
</NODE4> 
</NODE3> 
</NODE2> 
<NODE2> 
<NODEADDRESS>1:2</NODEADDRESS> 
<LEVELIDENTIFIER>2</LEVELIDENTIFIER> 
<NODENAME>GENERAL MERCH                      </NODENAME> 
<ISGREY>1</ISGREY> 
</NODE2> 
<NODE2> 
<NODEADDRESS>1:3</NODEADDRESS> 
<LEVELIDENTIFIER>2</LEVELIDENTIFIER> 
<NODENAME>PRODUCE                            </NODENAME> 
<ISGREY>0</ISGREY> 
</NODE2> 
<NODE2> 
<NODEADDRESS>1:4</NODEADDRESS> 
<LEVELIDENTIFIER>2</LEVELIDENTIFIER> 
<NODENAME>MEAT                               </NODENAME> 
<ISGREY>1</ISGREY> 
</NODE2> 
<NODE2> 
<NODEADDRESS>1:5</NODEADDRESS> 
<LEVELIDENTIFIER>2</LEVELIDENTIFIER> 
<NODENAME>FROZEN                             </NODENAME> 
<ISGREY>0</ISGREY> 
</NODE2> 
<NODE2> 
<NODEADDRESS>1:6</NODEADDRESS> 
<LEVELIDENTIFIER>2</LEVELIDENTIFIER> 
<NODENAME>FLORIST                            </NODENAME> 
<ISGREY>1</ISGREY> 
</NODE2> 
<NODE2> 
<NODEADDRESS>1:7</NODEADDRESS> 
<LEVELIDENTIFIER>2</LEVELIDENTIFIER> 
<NODENAME>DAIRY                              </NODENAME> 
<ISGREY>0</ISGREY> 
</NODE2> 
<NODE2> 
<NODEADDRESS>1:8</NODEADDRESS> 
<LEVELIDENTIFIER>2</LEVELIDENTIFIER> 
<NODENAME>HBC                                </NODENAME> 
<ISGREY>1</ISGREY> 
</NODE2> 
</NODE1>

Please find snippets of my XSL attached.

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; version = "1.0">
<xsl:output method="html"/>

<xsl:template match="/"> <!-- match for the Root Element of the XML Document -->
   <xsl:apply-templates /> 
</xsl:template>

<xsl:template match="NODE1">

   <!-- Check if this Node has Children -->
   <xsl:variable name = "countofNode2">
      <xsl:value-of select = "count(//NODE2)"/>
   </xsl:variable>

   <!-- Set the Variables like NodeAddress,levelidentifier,Nodename to be passed to 
        javascript functions -->
   <xsl:variable name = "nodeaddr1">
        <xsl:value-of select = "(//NODE1/NODEADDRESS) "/>
   </xsl:variable>
   <xsl:variable name = "lidentifier1">
       <xsl:value-of select = "(//NODE1/LEVELIDENTIFIER) "/>
   </xsl:variable>
   <xsl:variable name = "nodename1">
      <xsl:value-of select = "(//NODE1/NODENAME) "/>
    </xsl:variable>
   
   <xsl:variable name = "color1">
      <xsl:value-of select = "(//NODE1/ISGREY) "/>
    </xsl:variable>

   <!-- Display "NODE1" tag -->

   <table>
   <xsl:if test="($color1 &gt; 0)">
   <TR class="DARK">
     	  <TD>
       	  
	  <!-- Display Anchor Image Link -->
	  <xsl:if test="($countofNode2 &gt; 0)">
            <A class="hier" href="javascript:collapse('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');">
              <img src="\rbrr\images\treePics\downarrow.gif" border="0" />
            </A>
	  </xsl:if>
	  <xsl:if test="not($countofNode2 &gt; 0)">
            <A class="hier" href="javascript:expand('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');">
              <img src="\rbrr\images\treePics\rightarrow.gif" border="0" />
            </A>
	  </xsl:if>
          <!-- Display Anchor Text Link -->
           <A class="hier" href="javascript:selectNode('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');"> 
                 <xsl:value-of select="NODENAME"/>
              </A>
          </TD>
      </TR>
    </xsl:if>
     <xsl:if test="(not($color1 &gt; 0))">
     <TR class="WHITE">
     	  <TD>
       	  
	  <!-- Display Anchor Image Link -->
	  <xsl:if test="($countofNode2 &gt; 0)">
            <A class="hier" href="javascript:collapse('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');">
              <img src="\rbrr\images\treePics\downarrow.gif" border="0" />
            </A>
	  </xsl:if>
	  <xsl:if test="not($countofNode2 &gt; 0)">
            <A class="hier" href="javascript:expand('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');">
              <img src="\rbrr\images\treePics\rightarrow.gif" border="0" />
            </A>
	  </xsl:if>
          <!-- Display Anchor Text Link -->
           <A class="hier" href="javascript:selectNode('{$nodeaddr1}','{$lidentifier1}','{$nodename1}');"> 
                 <xsl:value-of select="NODENAME"/>
              </A>
          </TD>
      </TR>
    </xsl:if>
  </table>
<xsl:variable name="j" select="1"> </xsl:variable>
<xsl:variable name = "count1">
<xsl:value-of select = "count(//NODE2)"/>
</xsl:variable>

   <xsl:call-template name = "forloop1" >
      <xsl:with-param name = "j" select = "$j"/>
      <xsl:with-param name = "count1" select = "$count1"/>
   </xsl:call-template>


</xsl:template>

<!-- Anand Forloop1-->
<xsl:template name= "forloop1">
   <xsl:param name = "j"/>
   <xsl:param name = "count1"/>
   
   <!-- Check if this Node has Children -->
   
   <xsl:variable name = "countofNode3">
      <xsl:value-of select = "count(//NODE2[$j]/NODE3)"/>
   </xsl:variable>

   <xsl:variable name="i" select="1"> </xsl:variable>
   <xsl:variable name = "count2">
      <xsl:value-of select = "count(//NODE2[$j]/NODE3) "/>
   </xsl:variable>
   
   <xsl:variable name = "nodeaddr2">
      <xsl:value-of select = "(//NODE2[$j]/NODEADDRESS) "/>
    </xsl:variable>
    <xsl:variable name = "lidentifier2">
      <xsl:value-of select = "(//NODE2[$j]/LEVELIDENTIFIER) "/>
    </xsl:variable>
    <xsl:variable name = "nodename2">
      <xsl:value-of select = "(//NODE2[$j]/NODENAME) "/>
    </xsl:variable>
    <xsl:variable name = "color2">
      <xsl:value-of select = "(//NODE2[$j]/ISGREY) "/>
    </xsl:variable>
 <!-- For "Node2" tag -->
   <xsl:if test="($count1 &gt; 0)">
    <xsl:if test="($color2 &gt; 0)">
     <TR class="DARK">
       	  <TD>&#160;&#160;
       	  <!-- Display Anchor Image Link -->
	  <xsl:if test="($countofNode3 &gt; 0)">
            <A class="hier" href="javascript:collapse('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');">
              <img src="\rbrr\images\treePics\downarrow.gif" border="0" />
            </A>
	  </xsl:if>
	  <xsl:if test="not($countofNode3 &gt; 0)">
            <A class="hier" href="javascript:expand('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');">
              <img src="\rbrr\images\treePics\rightarrow.gif" border="0" />
            </A>
	  </xsl:if>
          <!-- Display Anchor Text Link -->
           <A class="hier" href="javascript:selectNode('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');"> 
                <xsl:value-of select="//NODE2[$j]/NODENAME"/>
              </A>
          </TD>
     </TR> 
   </xsl:if>
   <xsl:if test="(not($color2 &gt; 0))">
    <TR class="WHITE">
      	  <TD>&#160;&#160;
       	  <!-- Display Anchor Image Link -->
	  <xsl:if test="($countofNode3 &gt; 0)">
            <A class="hier" href="javascript:collapse('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');">
              <img src="\rbrr\images\treePics\downarrow.gif" border="0" />
            </A>
	  </xsl:if>
	  <xsl:if test="not($countofNode3 &gt; 0)">
            <A class="hier" href="javascript:expand('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');">
              <img src="\rbrr\images\treePics\rightarrow.gif" border="0" />
            </A>
	  </xsl:if>
          <!-- Display Anchor Text Link -->
           <A class="hier" href="javascript:selectNode('{$nodeaddr2}','{$lidentifier2}','{$nodename2}');"> 
                <xsl:value-of select="//NODE2[$j]/NODENAME"/>
              </A>
          </TD>
     </TR> 
     </xsl:if>
   </xsl:if>

In  a similar fashion by calling nested templates, I transform the XSL to display the XML as a collapsible tree.
When I do the transformation on WindowsNT it takes 20/25 seconds wheres on AIX it takes 3/4 minutes. I just can figure out why? Does any one have any idea why this happens? Please tell me how I can fine tune my XSL for enhanced performance.

Thanks,
Anand

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]