|
Subject: Re: [xsl] sequence of strings From: Florent Georges <lists@xxxxxxxxxxxx> Date: Tue, 2 Dec 2008 15:12:37 +0100 (CET) |
Ruud Grosmann wrote:
Dag Ruud,
> My question is: this solution looks clumsy. How can I improve it?
I don't have the time to analyze your stylesheet, but a few
remarks... It seems you use a string to represent structured values.
Why don't you use something structured? In XSLT 2.0, you can pass a
sequence of strings like this:
<xsl:with-param name="style" select="'italic', 'bold'"/>
Unfortunately, you can't have nested sequences, so you can't have
something like, say:
<!-- Do not try this at home! -->
<xsl:with-param name="values" select="
('style', ('italic', 'bold')),
('key', ('val1', 'val2', ...))"/>
But you can use several parameters if suitable:
<xsl:with-param name="style" select="'italic', 'bold'"/>
<xsl:with-param name="key" select="'val1', 'val2', ..."/>
Or you can always use XML:
<xsl:with-param name="values">
<style>
<italic/>
<bold/>
</style>
<key>
<val1/>
<val2/>
...
</key>
</xsl:with-param>
Instead of contains(), you will then be able to use regular XPath
set operators and mapping techniques:
<xsl:template name="get_attributes" as="xs:string?">
<xsl:param name="style" as="xs:string*"/>
<xsl:variable name="map">
<i key="bold" name="BLD"/>
<i key="italic" name="ITA"/>
</xsl:variable>
<xsl:sequence select="$map/i[@key = $style][1]/@name"/>
</xsl:template>
And if you use a function instead of a named template, you can use
the following to get the element name (but that's really a matter of
taste):
my:get-element-name(('bold', 'italic'))
Regards,
--
Florent Georges
http://www.fgeorges.org/
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| Re: [xsl] sequence of strings, Florent Georges | Thread | Re: [xsl] sequence of strings, Ruud Grosmann |
| RE: [xsl] sequence of strings, Michael Kay | Date | Re: [xsl] sequence of strings, Ruud Grosmann |
| Month |