Subject: Re: [xsl] super basic xsl question From: JBryant@xxxxxxxxx Date: Thu, 13 Jan 2005 13:28:25 -0600 |
Hi, Jeb, The way to block the default rule is <xsl:template match="elementToBlock"/>. So, in your example, you'd want: <xsl:template match="node"> <h1><xsl:value-of select="description"/></h1> <ul><xsl:apply-templates/><ul> </xsl:template> <xsl:template match="datum"> <!-- note the change here, too - JB --> <li><xsl:value-of select="."/></li> </xsl:template> <xsl:template match="description"/> Then you can stop using <xsl:template match="text()"/>. HTH Jay Bryant Bryant Communication Services (on contract at Synergistic Solution Technologies) Jeb Boniakowski <jeb@xxxxxxxxxxx> 01/13/2005 12:10 PM Please respond to xsl-list@xxxxxxxxxxxxxxxxxxxxxx To xsl-list@xxxxxxxxxxxxxxxxxxxxxx cc Subject Re: [xsl] super basic xsl question 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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] super basic xsl question, Mark Lundquist | Thread | RE: [xsl] super basic xsl question, Pawson, David |
RE: [xsl] super basic xsl question, Mark Lundquist | Date | Re: [xsl] xsl programming problem, Joris Gillis |
Month |