[xsl] Performance Problem Transforming Large Document

Subject: [xsl] Performance Problem Transforming Large Document
From: "Schwartz, Rechell R, ALABS" <rrschwartz@xxxxxxx>
Date: Wed, 18 Jun 2003 12:40:41 -0500
All,

I have an application where I transform an XML string into an XML document (which contains HTML) , and then transform the document to an HTML file containing special styling elements (alternate color rows), which I send directly to the browser.

The performance has been fine up until recently, when I encountered a very large XML file. Following is the code used for the transformations, and where the performance bottleneck occurred. Below the code, I have included the text from format.xsl, the stylesheet used in the bottlenecked transaction. Any suggestions on how to improve performance would be greatly appreciated. For a large file, it seems to be taking several minutes for the second transformation to take place.

Thanks in advance,
Rechell Schwartz

	 String flashText = sb.toString();
            if (flashText == null) flashText = "";
            String noflashText = "*** No flashes found
            TransformerFactory tFactory = TransformerFactory.newInstance();
	String xsl = "/stylesheets/data.xsl";
	Transformer transformer = tFactory.newTransformer(new StreamSource(getClass().getResourceAsStream(xsl)));
	transformer.setParameter("flash", flashText);
	transformer.setParameter("noflash", noflashText);
	String site_name = "".equals(hand.site_name) ? "N/A" : hand.site_name;
	transformer.setParameter("sitename", site_name);
	DOMResult domResult = new DOMResult();
	transformer.transform(new StreamSource(new StringReader(hand.detailresult)), domResult);
	Document document =(Document)domResult.getNode();
	xsl = "/stylesheets/format.xsl";
	transformer = tFactory.newTransformer(new StreamSource(getClass().getResourceAsStream(xsl)));

/** There is a huge bottleneck right here when the original XML file is very large

	transformer.transform(new DOMSource(document), new StreamResult(out));

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Text of format.xsl

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                   version="1.0">
<xsl:output method="html" indent="yes"/>

<xsl:template match="node()|@*"> <!--identity transform-->
     <xsl:copy>
       <xsl:apply-templates select="node()|@*"/>
     </xsl:copy>
</xsl:template>

<xsl:template match="table/tr[td[not(a) and not(@class)]]">
        <xsl:copy>
     <xsl:choose>
     <xsl:when test="count( preceding-sibling::tr[td[not(a)  and 
not(@class)]] ) mod 2 = 1">
     <xsl:for-each select="td[1]">
      <td class="evenMedium" width="35%">
       <xsl:apply-templates select="node()|@*"/>
       </td>
      </xsl:for-each>
      <xsl:for-each select="td[2]">
      <td class="evenMedium" width="65%">
       <xsl:apply-templates select="node()|@*"/>
       </td>
      </xsl:for-each>
     </xsl:when>
     <xsl:otherwise>
     <xsl:for-each select="td[1]">
       <td class="oddMedium" width="35%">
       <xsl:apply-templates select="node()|@*"/>
       </td>
      </xsl:for-each>
       <xsl:for-each select="td[2]">
       <td class="oddMedium" width="65%">
       <xsl:apply-templates select="node()|@*"/>
       </td>
      </xsl:for-each>
     </xsl:otherwise>
     </xsl:choose>
       </xsl:copy>
</xsl:template>


</xsl:stylesheet>

	

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


Current Thread