Re: <xsl:template match="...">

Subject: Re: <xsl:template match="...">
From: Mike Brown <mike@xxxxxxxx>
Date: Mon, 13 Nov 2000 16:56:52 -0700 (MST)
Alexander Ruehl wrote:
> I'm new to XSL, but as far as I know, the following code would look for a
> node named "name" and, if matched, output the containing elements:
> ...
> <xsl:template match="name">
>  <b>Name found.</b>
>  <xsl:apply-templates/>
> </xsl:template>

No, the "looking" is something that happens elsewhere. It does not happen
by virtue of there being a template that matches "name" elements. This
template just says what to do *if* *a* name element happens to be
encountered in the course of processing.

<xsl:apply-templates/> says "go process the nodes that are children of the
current node". For each given node, the best matching template is found
and its instructions executed.

Processing begins at the root node.

There are built-in templates for each type of node. There are others, but
mainly you need to know about these:

  For root and element nodes: go process children.
  For text nodes: copy node to result tree.

> But if I open a XML file which uses this XSL, even if there is no node
> "name", the output is "<b>Name found.<b>". So, whatever I put in 'match',
> e.g. "hdgsgdsgfjhgdsjfhgd", the included part is written out.
> What goes wrong here?

You have probably bound the 'xsl' prefix to a namespace URI that is
different than the one your XSL processor is expecting, so it is treating
your <xsl:foo/>s as literal result elements rather than XSLT instructions.

This is a FAQ. See

   - Mike
Mike J. Brown, software engineer at         My XML/XSL resources: in Denver, Colorado, USA 

 XSL-List info and archive:

Current Thread