xsl-list
[Top] [All Lists]

RE: super basic xsl question

2005-01-13 12:20:56

From: Jeb Boniakowski [mailto:jeb(_at_)protosw(_dot_)com]
[..snip]
In general though, on the topic of apply-templates, there is a larger
issue that trips me up.  Oftentimes, it seems that I mess up my set of
templates in such a way that things get matched and copied to the
output tree automatically, even though they are matched.  To deal with
this, I've been sticking a template at the top of my sheets that is:

<xsl:template match="text()"/>

Is this bad style?  Is it a crappy hack to deal with messed up
templates?

Yes :-).


I have situations where I have things along the lines of:

<node>
   <description>Foo</description>
   <datum>1</datum>
   <datum>2</datum>
</node>

When I do something like:

<xsl:template match="node">
   <h1><xsl:value-of select="description"/></h1> <!-- XXX --->
   <ul><xsl:apply-templates/><ul> <!-- YYY --->
</xsl:template>

<xsl:template match="node/datum">
  <li><xsl:value-of select="."/></li>
</xsl:template>

I end up with:

<h1>Foo</h1>
Foo  <!-- Extraneous foo that I don't want -->
<ul>
  <li>1</>
  <li>2</2>
</ul>

OK... see the lines I marked with the comments 'XXX' and 'YYY' above.

You can either:

(1) Change the line marked 'YYY' to this:

        <ul><xsl:apply-templates select="datum" /></ul>

Or,

(2) Move the line 'XXX' out into its own template that matches
"node/description".  This will leave you with a template matching "node"
that does nothing but "<xsl:apply-templates />.  That template is
unnecessary and can be deleted... the default rules will do what you want
here (since <node> has no (non-whitespace) text-only children).

The choice of (1) or (2) is a matter of taste, or how you happen to be
feeling at the moment :-)... it really doesn't matter.  (1) is more of a
"push" (template-driven) approach, and (2) is more of a "pull"
(content-driven) approach.

Does the <apply-templates/> in
node automatically copy the text values of any child nodes that are not
explicitly matched?

Yes.

 If so, why?

See http://www.dpawson.co.uk/xsl/sect2/defaultrule.html.

cheers,
-ml-


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



<Prev in Thread] Current Thread [Next in Thread>