RE: [xsl] <xsl:value-of select="for ..." separator=", ">

Subject: RE: [xsl] <xsl:value-of select="for ..." separator=", ">
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 6 May 2005 22:58:45 +0100
I suspect that your function returns a sequence of text nodes rather than a
sequence of strings. To make other cases behave more predictably, for
example

<xsl:value-of select="x:f()"/>

<xsl:function name="x:f">
  <xsl:text>[</xsl:text><xsl:value-of select="13"/><xsl:text>]</xsl:text>
</xsl:function>

We decided that separators would only be used between atomic values, not
between text nodes.

My guess is that your function is returning text nodes because

(a) it uses xsl:value-of to create its result, rather than xsl:sequence, and

(b) it doesn't declare its return type

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



> -----Original Message-----
> From: Kevin Rodgers [mailto:kevin.rodgers@xxxxxxx] 
> Sent: 06 May 2005 21:04
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] <xsl:value-of select="for ..." separator=", ">
> 
> In my XSLT 2.0 stylesheet processed by Saxon 8.3, I had this:
> 
>   <xsl:value-of
>      select="for $relation in $relation-list
>              return esd:xref-doc-num($mb3-connection, $relation)"
>      separator=", "/>
> 
> But the results of the function calls were concatenated, without the
> separator string between them.  Using string-join() like this 
> yields the
> desired results:
> 
>   <xsl:value-of
>      select="string-join(for $relation in $relation-list
>                          return 
> esd:xref-doc-num($mb3-connection, $relation),
>                          ', ')"/>
> 
> But why is that necessary?  Why doesn't the xsl:value-of separator
> attribute work as I expect?
> 
> Thanks,
> -- 
> Kevin Rodgers

Current Thread