![]() |
![]() | ![]() | ![]() | 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:01:00 PM Thanks, I'll try that out on some 'problem' transforms ;-) On Wed, 8 Sep 2004 15:13:02 +0100, "Marrow" <m--a-r-r-o-w@m-a-r-r-o-w--s-o-f-t.com> wrote: >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 | |||||
|
