[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] 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 > > > 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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|