[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Regarding XSL performance on AIX

Subject: Regarding XSL performance on AIX
From: "Anand Ganapathy" <Anand.Ganapathy@xxxxxx>
Date: Fri, 17 May 2002 09:57:21 +0530
javascript selectnode
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


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.