Subject: Re: PARAMS and VARIABLES in XSL
From: mark bordelon <markcbordelon@xxxxxxxxx>
Date: Tue, 30 Jan 2007 13:20:46 -0800 (PST)
|
Dave,
This worked beautifully. Thanks.
I will have to read your informative response
carefully to get all the added value. Once again,
thanks for taking the time to help a new guy.
Mark
--- David Carlisle <davidc@xxxxxxxxx> wrote:
>
> I don't think you need any variables, despite the
> subject line,
>
>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
> <xsl:strip-space elements="clause"/>
> <xsl:output indent="yes"/>
>
> <xsl:template match="*">
> <xsl:copy>
> <xsl:copy-of select="@*"/>
> <xsl:apply-templates/>
> </xsl:copy>
> </xsl:template>
>
> <xsl:template match="word">
> <word
>
soundtime="{((.|preceding-sibling::sound)/@time)[last()]}">
> <xsl:apply-templates/>
> </word>
> </xsl:template>
>
> <xsl:template match="sound"/>
>
> </xsl:stylesheet>
>
> to comment on your code
>
>
> <xsl:template match="//clause/*">
>
> there's never a need to start a match pattern with
> // it doesn't chage
> which nodes are matched (not quite true in xslt)
>
> <xsl:if test="local-name() = 'sound'">
>
> generally it's better to avoid doing string tests
> against element names
>
> <xsl:if test="self::sound">
>
> is likely to be more efficient 9and safer in a
> namespace context)
>
> <xsl:if test="local-name() = 'sound'">
> <xsl:param name="soundtime" select="@time" />
> </xsl:if>
>
>
> xsl:param can only be used at the top level as a
> template, where they
> must come first, or for global parameters must be at
> the top levl of the
> styleseet. You could use xsl:variable there but the
> scope of a variable
> binding is to the end of the containing element, so
> the variable would
> go out of scope at the </xsl:if>
>
> In more complicated case you do need to use a
> parameter but in that case
> you need to apply templates in a different order,
> instead of applying
> templates to all the children, just apply templates
> to the first child,
> then have each child apply templates to the next
> sibling, passing on a
> paramater with xsl:with-param. This is usually known
> as a tree-walking
> idiom, google should show some examples, but in this
> case you can
> directly evaluate the required value on each node,
> so there is no need
> for a parameter to accumulate earlier results.
>
> David
>
>
____________________________________________________________________________________
Need a quick answer? Get one in minutes from people who know.
Ask your question on www.Answers.yahoo.com
| Current Thread |
David Carlisle - 30 Jan 2007 20:05:40 -0000
- mark bordelon - 30 Jan 2007 21:21:44 -0000 <=
Abel Braaksma - 30 Jan 2007 20:05:58 -0000
|
|