xsl-list
[Top] [All Lists]

Re: super basic xsl question

2005-01-13 11:36:08
Or maybe this is more stylish...

    <xsl:template match="node">
        <xsl:apply-templates select="description"/>
        <ul>
            <xsl:apply-templates select="datum"/>
        </ul>
    </xsl:template>
    
    <xsl:template match="description">
        <h1><xsl:value-of select="."/></h1>
    </xsl:template>
    
    <xsl:template match="datum">
                <li><xsl:value-of select="."/></li>
    </xsl:template>


On Thu, 13 Jan 2005 18:25:16 +0000, António Mota <amsmota(_at_)gmail(_dot_)com> 
wrote:
You can add
<xsl:template match="description"/>

cause your description is allready been processed in the first
template and you don't want to process it twice.


On Thu, 13 Jan 2005 13:10:00 -0500, Jeb Boniakowski 
<jeb(_at_)protosw(_dot_)com> wrote:
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.


--~------------------------------------------------------------------
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>
--~--




--~------------------------------------------------------------------
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>