xsl-list
[Top] [All Lists]

Performance Problem Transforming Large Document

2003-06-18 10:40:41
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



<Prev in Thread] Current Thread [Next in Thread>
  • Performance Problem Transforming Large Document, Schwartz, Rechell R, ALABS <=