xsl-list
[Top] [All Lists]

RE: [xsl] Set variable via contents of <variable> element

2009-12-17 08:46:03

As I understand it, I can set the value of a variable in two ways:
1. By the "select" attribute of the <variable> element:
<xsl:variable name="myvariable" select="'myvalue'"/>

2. By the contents of the <variable> element:
<xsl:variable name="myvariable">
  My value
</xsl:variable>

Which have completely different effects. In the first case, the value of the
variable is a string. In the second it is a tree of nodes: a document node,
with a text node child containing the string "My value" (plus surrounding
whitespace). Incidentally the second form can be dramatically slower than
the first.

But how do I set the variable using the second method? 

In XSLT 1.0 you can't.

In XSLT 2.0 you could use

<xsl:variable name="x" as="node()">
  <xsl:sequence select="..."/>
</xsl:variable>

The reason I need to do this is because I want to set the 
variable 'usethis'
to the result of a <choose> element which (as far as I know) 
I cannot include in a "select" attribute. 

Yes, in XSLT 1.0 this is a problem. Sometimes a workaround is to use

<xsl:variable select="expr1[condition] | expr2[not(condition)]"/>

which is equivalent to the XSLT 2.0

<xsl:variable select="if (condition) then expr1 else expr2"/>

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay 


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--