[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Can I use a boolean variable in an xsl:if test


Subject: RE: [xsl] Can I use a boolean variable in an xsl:if test
From: "Andrew Welch" <ajwelch@xxxxxxxxxxxxxxx>
Date: Wed, 9 Feb 2005 08:33:18 -0000

> beware though that that will get you burned again when you
> start using XSLT2 scented water.
>
> xsl:value-of returns a text node with string value the string
> value of the expression. This is subtly or not so subtly
> different from a string. It doesn't make so much difference
> in XSLT1 as the only way to carry strings around is to put
> them in text nodes, but in xpath2 you can have sequences of
> strings and sequences of text nodes (and sequences that
> contain both strings and text nodes) the rules for the two
> cases (and in particular whether spaces are automatically
> inserted between adjacent
> items) are different on the two cases.

Yes, but I think the 2.0 way makes more sense.

Just to make sure we are talking about the same thing (and to help
cement my knowledge), consider:

<root>
  <node>foo</node>
  <node>bar</node>
</root>

In 1.0:

<xsl:template match="root">
  <xsl:value-of select="node"/>
</xsl:template>

Returns:

'foo'

Because in XSLT 1.0 'first item semantics' apply when a value-of is
performed on a sequence.

In 2.0 the same template would return:

'foo bar'

That is, all items in the sequence with a single space as a seperator.
In order to remove/control the space, we can use the @separator on
value-of:

<xsl:value-of select="node" separator=""/>

Which would produce:

'foobar'

For me, that's much more intuitive than just picking the first one.
Another plus for 2.0 :)

Of course, if there is another sequence related area to get burned on
please post an example - it's good to know the gotchas up front.

cheers
andrew


Current Thread
Keywords