Subject: Re: passing a sequence as a parameter
From: David Carlisle <davidc@xxxxxxxxx>
Date: Tue, 26 Feb 2008 11:39:44 GMT
|
simplest change to what you posted is probably something like this:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:param name="my_param" as="xs:string?" />
<xsl:param name="my_params" as="xs:string*" select="tokenize($my_param,',')"/>
<xsl:output indent="yes"/>
<xsl:template match="/root">
<root>
<xsl:apply-templates/>
</root>
</xsl:template>
<xsl:template match="user">
<user>
<xsl:for-each select="name">
<xsl:variable name="p" select="position()"/>
<xsl:if test="$my_params[$p] = 'true'">
<name>
<xsl:value-of select="."/>
</name>
</xsl:if>
</xsl:for-each>
</user>
</xsl:template>
</xsl:stylesheet>
$ saxon9 rg.xml rg.xsl my_param='true,false,true'
<?xml version="1.0" encoding="UTF-8"?>
<root>
<user>
<name>Robert</name>
<name>Graham</name>
</user>
</root>
If you are calling teh stylesheet via an APi that allows seqeunce values
to be constructed and passed in externally you may set your my_params
parameter directly to that sequence, and ignore the my_param parameter,
but conversely if as I demonstrate above you are using a simple APi like
the saxon command line that doesn't allow structured values to be passed
in you can ignore the my_params parameter and set the my_param parameter
to a single string with comma separated values, the sequence will tehn
be constructed as the default value of $my_params.
David
________________________________________________________________________
The Numerical Algorithms Group Ltd is a company registered in England
and Wales with company number 1249803. The registered office is:
Wilkinson House, Jordan Hill Road, Oxford OX2 8DR, United Kingdom.
This e-mail has been scanned for all viruses by Star. The service is
powered by MessageLabs.
________________________________________________________________________
|