[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] super basic xsl question


Subject: Re: [xsl] super basic xsl question
From: Jeb Boniakowski <jeb@xxxxxxxxxxx>
Date: Thu, 13 Jan 2005 13:10:00 -0500

Wendell--

Thanks for the reply. This is the kind of info I'm having a hard time getting from like w3schools.com, etc.

In this particular case, though, I want the template that matches the value of <child> to be agnostic to the markup that is in there, with no more template processing, I just want whatever was already done (by this point, that chunk of xml has been processed by other sheets, and will be processed by later sheets) so I didn't want to do an explicit match for the link tag.

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? Or is it the correct way to suppress default rules?

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>
  <ul><xsl:apply-templates/><ul>
</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>

Tacking a <xsl:template match="text()"/> seems to catch the 'Foo' and kill it, but why do I have to do this? Does the <apply-templates/> in node automatically copy the text values of any child nodes that are not explicitly matched? If so, why? Is it better to have an additional template that specifically matches 'description' and does nothing? Or to take the <h1><xsl:value-of select="description"/></h1> out and move it into this explicit template? Or should I be doing something more like <xsl:apply-templates select="datum"/>?

Again, thanks.

jeb.


Current Thread
Keywords
xml