TOUDIdel said:
it isn't good thinking way. xslt isn't programing language
- remember of it.
The hell it isn't. XSLT is a declarative, rule-based
programming language. It's a DSL, not a general-purpose
language, but nevertheless it's actually Turing-complete.
Google 'xslt turing machine'.
To answer the OP's question, while XSLT doesn't have an
array data type, you can implement a static lookup table
this way:
<xsl:stylesheet version="1.0"
xmlns:xsl="
http://www.w3.org/1999/XSL/Transform"
xmlns:lt="
http://example.org/lookup-table">
<xsl
aram name="key"/>
<lt:lookup-table>
<lt
air key="foo" value="1"/>
<lt
air key="bar" value="2"/>
<lt
air key="baz" value="3"/>
</lt:lookup-table>
<xsl:template match="/">
<value>
<xsl:apply-templates
select=
"
document('')
/xsl:stylesheet/lt:lookup-table
/lt
air[@key=$key]/@value
"/>
</value>
</xsl:template>
</xsl:stylesheet>
Let's see:
pavel@debian:~/dev/xslt$ xsltproc --stringparam key foo
lookup.xsl lookup.xsl
<?xml version="1.0"?>
<value xmlns:lt="
http://example.org/lookup-table">1</value>
pavel@debian:~/dev/xslt$ xsltproc --stringparam key bar
lookup.xsl lookup.xsl
<?xml version="1.0"?>
<value xmlns:lt="
http://example.org/lookup-table">2</value>
pavel@debian:~/dev/xslt$ xsltproc --stringparam key baz
lookup.xsl lookup.xsl
<?xml version="1.0"?>
<value xmlns:lt="
http://example.org/lookup-table">3</value>
pavel@debian:~/dev/xslt$
Alternatively, using keys:
<xsl:stylesheet version="1.0"
xmlns:xsl="
http://www.w3.org/1999/XSL/Transform"
xmlns:lt="
http://example.org/lookup-table">
<xsl
aram name="key"/>
<xsl:key name="key" match="lt
air" use="@key"/>
<lt:lookup-table>
<lt
air key="foo" value="1"/>
<lt
air key="bar" value="2"/>
<lt
air key="baz" value="3"/>
</lt:lookup-table>
<xsl:template match="/">
<value>
<xsl:for-each select="document('')">
<xsl:apply-templates
select="key('key',$key)/@value"/>
</xsl:for-each>
</value>
</xsl:template>
</xsl:stylesheet>