xsl-list
[Top] [All Lists]

Re: [xsl] Slow XSLT

2008-03-07 04:59:29
On 07/03/2008, Cleyton Jordan <cleytonjordan(_at_)yahoo(_dot_)co(_dot_)uk> 
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/

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>