|
Subject: RE: [xsl] Data types and xsl:sequence From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Tue, 25 Jan 2005 09:32:25 -0000 |
If you have two adjacent strings in the sequence used to construct an
element node, a space will be inserted between them. So if you do this:
<a>
<xsl:sequence select="'aaa'"/>
<xsl:sequence select="'bbb'"/>
</a>
the result will be
<a>aaa bbb</a>
There are various ways you can avoid this effect, for example:
<a>
<xsl:sequence select="concat('aaa','bbb')"/>
</a>
<a>
<xsl:value-of separator="">
<xsl:sequence select="'aaa'"/>
<xsl:sequence select="'bbb'"/>
</xsl:value-of>
</a>
<a>
<xsl:value-of select="'aaa'"/>
<xsl:value-of select="'bbb'"/>
</a>
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Jim Neff [mailto:jneff@xxxxxxxxxxxxxxx]
> Sent: 24 January 2005 21:18
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Data types and xsl:sequence
>
> Greetings,
>
> I'm having trouble understanding data types and using the function
> xsl:sequence.
>
> I have one common template that I call to create padding in my output
> document:
>
> <xsl:template name="pad-number">
>
> <xsl:param name="max" />
> <xsl:param name="char" />
>
> <xsl:sequence select="string-join((for $i in 1 to
> xs:integer($max) return
> $char), '')"/>
>
> </xsl:template>
>
>
> So if I am padding for a text field, I pass in   for a
> space and if
> it's a numeric field I use '0'.
>
> My problem is (and I know this sounds silly) whenever I
> change from a text
> to a numeric field there is an extra space inserted into the
> xsl:sequence
> output. This is a space and not the character I am passing into this
> template. So, if I use a tilda '~' instead of ' ' I see the
> appropriate number of tildas plus a space (hex code 20) in my output.
>
> I do not have this problem when I am not changing from
> numeric to text, or
> if I have consecutive numerics or consecutive text fields.
>
> Perhaps I am not using the $max variable correctly? I found
> the only way to
> get it to work is when I specify xs:integer around it because
> the portion of
> code that calls this template is performing a calculation and
> I think the
> processor (Saxon 8.something) is creating a mandotory
> xs:double whenever a
> calculation is performed.
>
> This is probably a logic problem and has nothing to do with
> XSLT syntax but
> I just thought I'd throw this out here and maybe one of the
> gurus on this
> list could point me in the right direction.
>
> Thanks,
> Jim Neff
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| [xsl] Data types and xsl:sequence, Jim Neff | Thread | RE: [xsl] Data types and xsl:sequen, Jim Neff |
| RE: [xsl] case-sensitivity in xml, Pawson, David | Date | Re: [xsl] call-template vs apply-te, omprakash . v |
| Month |