Subject: [xsl] Regarding XSL performance on AIX From: "Anand Ganapathy" <Anand.Ganapathy@xxxxxx> Date: Fri, 17 May 2002 09:57:21 +0530 |
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 > 0)"> <TR class="DARK"> <TD> <!-- Display Anchor Image Link --> <xsl:if test="($countofNode2 > 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 > 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 > 0))"> <TR class="WHITE"> <TD> <!-- Display Anchor Image Link --> <xsl:if test="($countofNode2 > 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 > 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 > 0)"> <xsl:if test="($color2 > 0)"> <TR class="DARK"> <TD>   <!-- Display Anchor Image Link --> <xsl:if test="($countofNode3 > 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 > 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 > 0))"> <TR class="WHITE"> <TD>   <!-- Display Anchor Image Link --> <xsl:if test="($countofNode3 > 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 > 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] template precedence probl, Jeni Tennison | Thread | Re: [xsl] Regarding XSL performance, Mike Brown |
Re: [xsl] On the XPath to my editor, Mark R. Diggory | Date | [xsl] Simple problem - complicated , Stuart Celarier |
Month |