[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: Slow XSLT

Subject: Re: Slow XSLT
From: "Andrew Welch" <andrew.j.welch@xxxxxxxxx>
Date: Fri, 7 Mar 2008 11:59:04 +0000
Re:  Slow XSLT
On 07/03/2008, Cleyton Jordan <cleytonjordan@xxxxxxxxxxx> wrote:
>  1 - <xsl:variable name="teams"
>  select="//team[not(.=preceding::team)]"/>
>
>  I know that this expression is getting a node set of
>  all the unique team elements.
>
>  I am confused about the "." (dot) in this expression
>  and the comparisson with the preceding::team.
>
>  For the first team, does the "." (dot) match the value
>  of the node - 'Brazil' - and preceding::team match the
>  value as well?
>
>  select="//team[not('Brazil'=preceding::'Brazil')]"/>
>
>  or "." and preceding::team match the wholde node?
>
>  What are we comparing here the element value or the
>  whole team element?

. is the string value, so 'Brazil'

The preceding axis contains all nodes before the current node in
document order, not including the current node - so for the first
<team> it would return nothing.

>  2 - Here we are inside a loop
>  <xsl:template match="results">
>   <xsl:for-each select="$teams">
>     <xsl:variable name="this" select="."/>
>
>  Again does "." match the value of each team or the
>  whole team element?

. is the string value of the current node, not the element itself


>  3 - <xsl:variable name="played"
>  select="count($matches[team=$this])"/>
>
>  Now we are computing how many times a particular team
>  has played.
>
>  count($matches[team=$this])
>
>  When you use this predicate [team=$this] are we
>  comparing the value of the element or the team
>  elements ?

the string value of elements are compared


>  4 - <xsl:variable name="won"
>  select="count($matches[team[.=$this]/@score >
>  team[.!=$this]/@score])"/>
>
>  I know that this expression is computing the victories
>  of a particular team. However, I do not understand the
>  logic of the expression. We have an extra predicate:
>
>  [team[.=$this]/@score
>
>  Why cant we just use [team=$this]/@score ?

because the score attribute is on the team element:

$matches[team=$this]/@score

would return the score attribute of the element in $matches if the
predicate evaluated to true

$matches[team[.=$this]/@score

returns the score attribute of the team element is the predicate
evaluated to true


>  5 - <xsl:variable name="for"
>  select="sum($matches/team[.=current()]/@score)"/>
>
>  What does current() mean in here? Is it the same as
>  the $this variable?

current() returns the node that was the context node outside of the
xpath...  when you do $matches/team the context node is changed to the
team element in $matches, the current() function will return what was
context node before you changed it.


-- 
Andrew Welch
http://andrewjwelch.com
Kernow: http://kernowforsaxon.sf.net/

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.