|
Subject: RE: [xsl] param vs context for passing arguments From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Wed, 16 Dec 2009 23:08:50 -0000 |
> This is simple template to replace hyphen with underscore in 'name'
> attribute of some element;
>
> <xsl:template name="ReplaceHyphenWithUnderscore">
> <xsl:analyze-string select="@name" regex="-">
> <xsl:matching-substring>
> <xsl:text>_</xsl:text>
> </xsl:matching-substring>
> <xsl:non-matching-substring>
> <xsl:value-of select="."/>
> </xsl:non-matching-substring>
> </xsl:analyze-string>
> </xsl:template>
Your code will be most versatile (reusable) if you write it as a function to
operate on any string.
> <xsl:function name="f:ReplaceHyphenWithUnderscore" as="xs:string">
<xsl:param name="input" as="xs:string"/>
> <xsl:analyze-string select="$input" regex="-">
> <xsl:matching-substring>
> <xsl:text>_</xsl:text>
> </xsl:matching-substring>
> <xsl:non-matching-substring>
> <xsl:value-of select="."/>
> </xsl:non-matching-substring>
> </xsl:analyze-string>
> </xsl:template>
>
Then you can write, for example
>
> <xsl:template match="xsd:element[<some condition here>]">
> <xsl:value-of name="f:ReplaceHyphenWithUnderscore(@name)"/>
> (...)
> </xsl:template>
>
Having said that, this particular operation can be achieved by a single call
of translate():
> <xsl:function name="f:ReplaceHyphenWithUnderscore" as="xs:string">
<xsl:param name="input" as="xs:string"/>
<xsl:sequence select="translate($in, '-', '_')"/>
> </xsl:template>
Regards,
Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] param vs context for pass, David Carlisle | Thread | Re: [xsl] param vs context for pass, Piotr Dobrogost |
| Re: [xsl] param vs context for pass, David Carlisle | Date | Re: [xsl] retaining entity declarat, a kusa |
| Month |