Re: [xsl] Constructing complex xs:string in variable

Subject: Re: [xsl] Constructing complex xs:string in variable
From: "Eliot Kimber ekimber@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Wed, 9 Oct 2019 14:43:28 -0000
And to explain why David's version works: value-of and xsl:text both result in
text nodes, not strings. So a sequence of xsl:value-of and xsl:text
instructions will result in a sequence of text nodes when are then converted
to strings resulting in a sequence of strings.

Wrapping everything in a single xsl:value-of results in a single text node and
thus a single string.

Looking at this now I realize it never occurred to me that xsl:value-of can
have content and not just a @select attribute. Learn something new every day.

Cheers,

E.

--
Eliot Kimber
http://contrext.com


o;?On 10/9/19, 8:30 AM, "David Carlisle d.p.carlisle@xxxxxxxxx"
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:

    On Wed, 9 Oct 2019 at 14:27, Christian Roth
    mulberrytech-lists@xxxxxxxx <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
    wrote:
    >
    > [re-sending - initial one didn't make it to the listb&?]
    >
    > Hello,
    >
    > I'm using XSLT2.
    >
    > I need to construct a complex string in a variable. I wanted to use XSLT
instructions for this, not pure XPath. I'm struggling with coercing the result
of the <xsl:variable> body to a single xs:string, not a sequence of
xs:string:
    >
    >
    > <xsl:variable name="var" as="xs:string">
    >   <xsl:text>prefix</xsl:text>
    >   <xsl:value-of select="'part1'"/>
    >   <!-- follows more complex code producing further fragments of desired
result string -->
    > </xsl:variable>
    >
    >
    > This gives me the error message (Saxon HE 9): "A sequence of more than
one item is not allowed as the value of variable $var ("prefix", "part1")"
    >
    > Of course, I could declare the variable as xs:string+ and then use
string-join( $var, '' ) on every use of $var, or create another variable that
holds the concatenated result of $var.
    >

    <xsl:variable name="var" as="xs:string">
    <xsl:value-of>
      <xsl:text>prefix</xsl:text>
      <xsl:value-of select="'part1'"/>
      <!-- follows more complex code producing further fragments of
    desired result string -->
    </xsl:value-of>
    </xsl:variable>

    David

Current Thread