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

RE: [xsl] xslt2 complex content sequences


Subject: RE: [xsl] xslt2 complex content sequences
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 5 Sep 2005 18:51:05 +0100

> What's the simplest XSLT 2 equivalent of the Xquery
> 
> <a>{1,2}{3}</a>

Saxon compiles this XQuery into code equivalent to:

<xsl:element name="a">
 <xsl:sequence select="1,2"/>
 <xsl:text/>
 <xsl:sequence select="3"/>
</xsl:element>

The zero-length text node disappears when added to an element, but it stops
the 2 and 3 being considered adjacent.

You could of course convert all the values to text nodes "by hand" using
xsl:value-of, which would eliminate all automatic spacing. That would seem
more natural in XSLT.

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

> 
> Xquery (like XSLT) puts spaces between (the string value of) atomic
> values when constructing element content, but doesn't put 
> spaces between
> enclosed expressions (which are like Attribute Value Templates, except
> they work in element content as well as attributes in xquery)
> 
> So you get
> <a>1 23</a>
> 
> In XSLT, obvious translations are things like
> 
> <a>
>  <xsl:sequence select="1"/>
>  <xsl:sequence select="2"/>
>  <xsl:sequence select="3"/>
> </a>
> 
> or
> 
> 
> <a>
>  <xsl:sequence select="(1,2)"/>
>  <xsl:sequence select="3"/>
> </a>
> 
> But these are equivalent and produce space separated:
> <a>1 2 3</a>
> 
> I came up with putting in an element node to stop the automatic space
> addition, then removing the extra node:
> 
> <a>
> <xsl:variable name="x">
>  <xsl:sequence select="1"/>
>  <xsl:sequence select="2"/>
> <x/>
>  <xsl:sequence select="3"/>
> </xsl:variable>
> <xsl:copy-of select="$x/node()[not(self::x)]"/>
> </a>
> 
> Which produces the right thing, but that seems a bit unnatural.
> I have a feeling I've missed some construction possibility
> that lets me control this spacing directly?....
> 
> David
> 
> ______________________________________________________________
> __________
> This e-mail has been scanned for all viruses by Star. The
> service is powered by MessageLabs. For more information on a proactive
> anti-virus service working around the clock, around the globe, visit:
> http://www.star.net.uk
> ______________________________________________________________
> __________


Current Thread
Keywords