![]() |
![]() | ![]() | ![]() | Altova Mailing List Archives>Archive Index >microsoft.public.xml Archive Home >Recent entries >Thread Prev - Re: Problem using msxml >Thread Next - Re: Problem using msxml Re: Problem using msxmlTo: NULL Date: 9/8/2004 3:13:00 PM Hi Neil, You generally find that, ascross transformation engines, explicitly 'casting' types yields between none and some performance improvement ;). With MS's transformation engines you tend to see the best performance hike for these subtle changes - my guess would be the way they internally deduce data types before deciding whether a conversion is needed. Of course, there are times in XSLT when explicitly casting is an absolute must in order to get the desired result - the one example that always springs to mind is index predicates, e.g. the possible difference in results between... <xsl:variable name="index" select="1"/> <xsl:value-of select="count(foo[$index])"/> and... <xsl:variable name="index">1</xsl:variable> <xsl:value-of select="count(foo[$index])"/> Cheers Marrow "Neil Smith [MVP Digital Media]" <neil@n...> wrote in message news:nootj01v43b99su91s2dfttvpgo1ldhdit@4...... > Thats a curious result, Marrow - are you saying that explicity telling > the MSXML parser to 'type' the data gives a performance improvement > over letting it implicitly determine the data type, in this case ? > > I wonder, is this a general method for improving XSLT parse > performance, or is it specific to MSXML ? > > Cheers - Neil > > On Wed, 8 Sep 2004 10:38:26 +0100, "Marrow" > <m--a-r-r-o-w@m-a-r-r-o-w--s-o-f-t.com> wrote: > > >Hi Darren, > > > >I think you might be surprised at the performance 'difference'... > > > >If you tweak the code I gave by replacing... > > <xsl:param name="n" select="."/> > >with... > > <xsl:param name="n" select="string(.)"/> > >and replace... > > <xsl:variable name="nv" select="substring-before($n,'E')"/> > >with... > > <xsl:variable name="nv" select="number(substring-before($n,'E'))"/> > > > >that should speed it up. > > > >Compared with using msxsl:number() on MSXML 4.0 over a sample of your data > >repeated 20,000 times - I am seeing almost identical times (averaged out on > >one of my machines at:- template method = 173.8ms; msxsl:number() method = > >173.2ms). > > > >Of course, be aware that msxsl:number() is not consistently supported even > >as an MS extension (it isn't supported in MSXML 3.0). > > > >Cheers > >Marrow > > > > > >"darren@w..." <darrenworkcom@d...> wrote in message > >news:6EED1412-0908-4AAE-A9A6-8943ECAFF88D@m...... > >> Thanks for the reply, I have actually gone with Joe's solution above, as > >our > >> datafiles can be quite large, and predominantly numbers. I there suspect > >> the petrformance of further template calls (especially the number that > >would > >> be required) if a function is available. > >> > >> Thanks for the post, > >> > >> Hugh > >> > >> "Marrow" wrote: > >> > >> > Hi Darren, > >> > > >> > You could write a template to handle exponential notation numbers, > >something > >> > like... > >> > > >> > <?xml version="1.0" encoding="UTF-8"?> > >> > <xsl:stylesheet version="1.0" > >> > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > >> > xmlns:fo="http://www.w3.org/1999/XSL/Format"> > >> > > >> > <xsl:template match="stuff"> > >> > <xsl:text>Value: </xsl:text> > >> > <xsl:call-template name="exnumber"/> > >> > <xsl:text> > >> </xsl:text> > >> > </xsl:template> > >> > > >> > <xsl:template name="exnumber"> > >> > <xsl:param name="n" select="."/> > >> > <xsl:choose> > >> > <xsl:when test="contains($n,'E')"> > >> > <xsl:variable name="nv" select="substring-before($n,'E')"/> > >> > <xsl:variable name="nexp" select="substring-after($n,'E')"/> > >> > <xsl:variable name="exp" > >> > > >select="substring('1000000000000000000000000000000',1,translate($nexp,'-',' ' > >> > )+1)"/> > >> > <xsl:choose> > >> > <xsl:when test="$nexp >= 0"> > >> > <xsl:value-of select="$nv * $exp"/> > >> > </xsl:when> > >> > <xsl:otherwise> > >> > <xsl:value-of select="$nv div $exp"/> > >> > </xsl:otherwise> > >> > </xsl:choose> > >> > </xsl:when> > >> > <xsl:otherwise> > >> > <xsl:value-of select="$n"/> > >> > </xsl:otherwise> > >> > </xsl:choose> > >> > </xsl:template> > >> > </xsl:stylesheet> > >> > > >> > > >> > HTH > >> > Marrow > >> > http://www.marrowsoft.com - home of Xselerator (XSLT IDE and debugger) > >> > http://www.topxml.com/Xselerator > >> > > >> > > >> > "darren@w..." <darren@w...@discussions.microsoft.com> wrote in > >> > message news:B41E4F0B-C97F-452F-8220-1326DE921065@m...... > >> > > I have an xml file: > >> > > <?xml version="1.0" encoding="UTF-8"?> > >> > > <myspace> > >> > > <stuff>5.6</stuff> > >> > > <stuff>1.27E-2</stuff> > >> > > </myspace> > >> > > > >> > > I have a stylesheet: > >> > > <?xml version="1.0" encoding="UTF-8"?> > >> > > <xsl:stylesheet version="1.0" > >> > > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > >> > > xmlns:fo="http://www.w3.org/1999/XSL/Format"> > >> > > > >> > > <xsl:template match=".//stuff"> > >> > > Value: <xsl:value-of select="number(.)"/> > >> > > </xsl:template> > >> > > > >> > > </xsl:stylesheet> > >> > > > >> > > > >> > > I expect the results: > >> > > <?xml version="1.0" encoding="UTF-8"?> > >> > > Value: 5.6 > >> > > Value: 0.0127 > >> > > > >> > > The results I get: > >> > > <?xml version="1.0" encoding="UTF-16"?> > >> > > Value: 5.6 > >> > > Value: NaN > >> > > > >> > > The parser doesn't seem to support exponential notation for numbers! > >> > > Is this true, or am I doing something wrong? > >> > > Is there a work around, as I have a lot of data from excel > >spreadsheets > >> > > that use this notation, and my style sheets are not working well with > >> > it!!! > >> > > > >> > > > >> > > Hugh > >> > > > >> > > >> > > >> > > > > | ![]() | ![]() | ![]() |
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | |||||
|
