Subject: n squared behavior with XT for 'preceding' tests?
From: "Wilson, James.W" <James.W.Wilson@xxxxxxxxxxxxx>
Date: Wed, 21 Jul 1999 10:38:20 -0500
|
hi all, we have what is probably a pretty common problem: we have a series
of elements in our input which may repeat a heading, or may be different
than the preceding instance, like so...
<hd>some heading</hd>
...
<hd>some heading</hd>
...
<hd>some OTHER heading</hd>
...
we are checking for the 'change points' like this:
<xsl:template match="HD">
<!-- Check to see if the text of the HD matches
the previous HD's text -->
<xsl:choose>
<xsl:when
test="not(text()=from-preceding-siblings(HD[position()=1])/text())">
<NEWDOC><xsl:copy>
<xsl:apply-templates/>
<!-- Output the tag's attributes
and its contents -->
</xsl:copy></NEWDOC>
</xsl:when>
<xsl:otherwise>
<xsl:copy><xsl:apply-templates/></xsl:copy>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
now, this works fine (with XT) for small documents, but what we find is
that, as documents get larger, this template works more and more slowly, in
proportion to how far we've progressed through the document. Since our input
file is pretty large (10 megs) this n squared behavior eventually brings the
process to its knees. We could split up the input, but of course would like
to do it all in XSL if there's a Right Way To Do It.
Any ideas from the gurus?
James Wilson
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
|