XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
Ai NarazakiSubject: Slow for-each select
Author: Ai Narazaki
Date: 18 Jun 2008 09:55 AM
Hello,

I have a for-each select call that is taking a long time (i.e. 10+ seconds) to load and I don't know why. There are ~1500 <d12> elements.

Thank you very much for your help.

the_grey_lantern


This is the template:

<xsl:template name="myTemplate">
<xsl:for-each select="/a/b/c/d/d12[not(.=following::d12)]">
...
</xsl:for-each>
</xsl:variable>


This is the structure of my XML:

<a>
<b>
<c>
<d>
<d1/>
<d2/>
<d3/>
<d4/>
<d5/>
<d6/>
<d7/>
<d8/>
<d9/>
<d10/>
<d11/>
<d12/>
<d13/>
<d14/>
</d>
</c>
</b>
</a>

Postnext
Alberto MassariSubject: Slow for-each select
Author: Alberto Massari
Date: 18 Jun 2008 03:52 PM
Hi,
which XSLT processor are you using?

Alberto

Postnext
Ai NarazakiSubject: Slow for-each select
Author: Ai Narazaki
Date: 19 Jun 2008 04:27 AM
Sorry, should have mentioned that. I'm using XSLT through Sarissa in a web browser. The delay only occurs in FireFox, not IE 7, but I need it to work properly in all browsers.

Thanks! :o)

Postnext
Alberto MassariSubject: Slow for-each select
Author: Alberto Massari
Date: 19 Jun 2008 05:59 AM
Hi,
it looks that Sarissa is just a wrapper around the XSLT processor provided by the browser. It looks that if you prefer predictability you can force him to always use Javeline (see http://dev.abiss.gr/sarissa/howtos.html#javeline).
Unfortunately, if the bottleneck is the XSLT processor used by Firefox, the only thing you can do is avoiding the usage of the following:: axis in the XPath expression, as that usually breaks the optimizations made by an XSLT engine.

Alberto

Postnext
Ai NarazakiSubject: Slow for-each select
Author: Ai Narazaki
Date: 19 Jun 2008 06:27 AM
Do you know how I might re-write the expression without using following::?

I basically want all of the unique D12 elements. Each D12 element, without exception, contains a tiny bit of text like this <d12>some text</d12>

Thanks

Postnext
Alberto MassariSubject: Slow for-each select
Author: Alberto Massari
Date: 20 Jun 2008 04:54 AM
Your expression is simply testing the next d12 element, not extracting all the unique values; if you really need to iterate over all the unique d12 elements you have to use xsl:key

Alberto

Posttop
Ai NarazakiSubject: Slow for-each select
Author: Ai Narazaki
Date: 20 Jun 2008 06:47 AM
Problem solved - Thank you very much Alberto :o)

For the benefit of others, this is what I changed my code to:

<xsl:key name="d12" match="d12" use="."/>

<xsl:template name="myTemplate">
<xsl:for-each select="/a/b/c/d/d12[generate-id()=generate-id(key('d12',.))]">
...
</xsl:for-each>
</xsl:template>

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.