This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
Re: XSLT Processing Model Questions
- From: Peter Davis <pdavis152 at attbi dot com>
- To: xsl-list at lists dot mulberrytech dot com
- Date: Fri, 12 Apr 2002 20:19:16 -0700
- Subject: Re: [xsl] XSLT Processing Model Questions
- References: <EFEGIOPKGBEGIGJHBLNFMECFCLAA.dietrich@ganx4.com>
- Reply-to: xsl-list at lists dot mulberrytech dot com
On Friday 12 April 2002 21:55, Dietrich Ayala wrote:
> Now, in this template, the source tree context node is still the root
> (/doc[1]), right? So how does this match anything, as the match expression
> seems like it would match any "doc" children of the context node?
>
> <xsl:template match="doc/title">
> <h1>
> <xsl:apply-templates/>
> </h1>
> </xsl:template>
>
> I think I'll stop there. Because if my understanding of how the initial
> context node and source-tree-nodes-to-be-processed are flawed, then it only
> goes downhill from here :)
The reason it works is because there is a different between *match*
expressions and *select* expressions. In match expressions (template
match="..."), the context node does not affect the result. Here,
match="doc/title" simply means to match <title> elements that are immediate
children of a <doc> element, regardless of what the current context is. Once
the <title> is matched, the <title> becomes the context node within the
template; the "doc/" is only a restriction on which <title>s can be matched.
Think of match expressions as going in reverse. Here are the basic steps:
* apply-templates selects a <title> node (as a child of the context node).
* The template tries to match "title" to the selected node. So far so good.
* The template looks to see if the <title> also has a <doc> parent. So far so
good.
* Everything has matched successfully, so the template executes with the
<title> as the context node.
On the other hand, in expressions like in
<xsl:apply-templates select="child::node()"/> (the equivilant of what you
have), are relative to the context node, as you know. But this only selects
the nodes; the act of matching them to a template is a totally different
process (read the XPath spec; these two types of expressions even have
different grammars, although they are very similar).
--
Peter Davis
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list