|
Subject: RE: [xsl] Slow XSLT From: Cleyton Jordan <cleytonjordan@xxxxxxxxxxx> Date: Fri, 7 Mar 2008 12:46:32 +0000 (GMT) |
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 >
> > 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 |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] Slow XSLT, Michael Kay | Thread | RE: [xsl] Slow XSLT, Cleyton Jordan |
| Re: [xsl] XSL omit part of a text i, David Carlisle | Date | Re: [xsl] XSL omit part of a text i, Mukul Gandhi |
| Month |