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

RE: Slow XSLT

Subject: RE: Slow XSLT
From: Cleyton Jordan <cleytonjordan@xxxxxxxxxxx>
Date: Fri, 7 Mar 2008 12:46:32 +0000 (GMT)
RE:  Slow XSLT
Hi Andrew and Michael,

I truly appreciate your explanation. I will try to
digest it all now by experimenting with some XPTAH.

Cheers

C

--- Michael Kay <mike@xxxxxxxxxxxx> wrote:

> > 
> > I am reading one of the articles that Manfred has
> suggested 
> > (Michael Kay: What kind of language is
> > XSLT?) so that I can learn more about using node
> sets, apply 
> > templates and recursion but I do not fully
> understand some of 
> > the XPATH expressions.
> 
> Please note, that article was written in 2001 and
> relates to XSLT 1.0.
> > 
> > 
> > These are the expressions used to compute the
> teams
> > standings:
> > 
> > 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.
> 
> Yes. In XSLT 2.0 you would use <xsl:for-each-group>
> here.
> > 
> > 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?
> 
> The expressions "." and "preceding::team" both
> evaluate to node-sets. ("."
> is a node-set with one member). When you compare two
> node-sets using "=" the
> result is true if there is any node in the first set
> whose string value is
> equal to the string value of a node in the second
> node-set. The string value
> of an element such as <team
> score="1">Scotland</team> is "Scotland".
> 
> > 
> > 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?
> 
> There's no "matching" going on here. "." is an
> expression whose value is a
> (singleton) node-set, in this case one of the nodes
> in the node-set $teams:
> presumably a <team> element.
> > 
> > count($matches[team=$this])
> > 
> > When you use this predicate [team=$this] are we
> comparing the 
> > value of the element or the team elements ? 
> 
> "team" is short for "child::team". So you are
> selecting all the nodes in
> $matches that have a child whose name is "team" and
> whose string-value is
> equal to [the string value of] $this.
> 
> 
> > 
> > 4 - <xsl:variable name="won"
> > select="count($matches[team[.=$this]/@score &gt; 
> > 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 is an attribute of the team, not
> of the match. The
> predicate [team=$this] is fine for selecting matches
> in which this team
> participated, but we want to select one of the teams
> in the match, not just
> the match.
> > 
> > 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? 
> 
> Yes, in this context. I don't know why I wrote some
> of the expressions using
> $this and some using current() - either would work.
> > 
> > In this case we are not using a predicate for the
> $matches 
> > variable. why? 
> 
> We don't need to. To find out how many goals
> Scotland scored, we need to
> select all the <team> elements equal to Scotland,
> across all the matches,
> and then sum their @score attributes. Matches in
> which Scotland didn't play
> will contribute nothing to the result.
> 
> To put it another way, asking "how many goals did
> Scotland score in all
> matches where they played?" gives the same answer as
> "how many goals did
> Scotland score in all matches?"
> 
> Michael Kay
> 
> 



		
___________________________________________________________ 
To help you stay safe and secure online, we've developed the all new Yahoo! Security Centre. http://uk.security.yahoo.com

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.