Re: [xsl] apply template

Subject: Re: [xsl] apply template
From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx>
Date: Tue, 24 Aug 2004 15:00:59 +0100
Hi Jan,

> 	<xsl:template match="/">
> 		<div class="Blog">
> 			<xsl:for-each select="myns:Blog/myns:Entry">
> 				<xsl:apply-templates/>
> 			</xsl:for-each>
> 		</div>
> 	</xsl:template>

When you have <xsl:apply-templates> with no select attribute it's the
same as having:

  <xsl:apply-templates select="child::node()" />

So you are iterating over each of the <Entry> elements with the
<xsl:for-each> and applying templates to their *children*, skipping
the other template in your stylesheet. You don't have a template for
any of the elements that are children of the <Entry> elements, so the
built-in templates are used. The built-in templates essentially give
you the string value of the elements that you apply templates to, so
you get the string value of all the children of the <Entry> elements.

What you wanted to do was apply templates to the <Entry> elements, so
do:

<xsl:template match="/">
  <div class="Blog">
    <xsl:apply-templates select="myns:Blog/myns:Entry" />
  </div>
</xsl:template>

or:

<xsl:template match="myns:Blog">
  <div class="Blog">
    <xsl:apply-templates select="myns:Entry" />
  </div>
</xsl:template>

Cheers,

Jeni

---
Jeni Tennison
http://www.jenitennison.com/

Current Thread