Re: [xsl] Typing variables

Subject: Re: [xsl] Typing variables
From: Ihe Onwuka <ihe.onwuka@xxxxxxxxxxxxxx>
Date: Tue, 18 Sep 2012 09:41:55 +0100
On Tue, Sep 18, 2012 at 9:32 AM, Andrew Welch <andrew.j.welch@xxxxxxxxx> wrote:
>>> or wrap all of the contents in <xsl:value-of> (with no select
>>> attribute) and then use xs:string
>>>
>>> or (most efficiently) change the existing value-of to xsl:sequence and
>>> concat the double quotes,  and use xs:string.
>>>
>>
>> that doesn't get past the type checker because it's sees the resulting
>> value as more than 1 string. It was useful  to change the value-of to
>> xsl:sequence.
>
> Which bit doesn't get past the type checker (it should be fine) - can
> you post the code?
>
    <xsl:template match="*">
       <xsl:text/>"<xsl:value-of select="if (contains(local-name(),'__')) then
		                                 substring-after(local-name(),'__') else
						 local-name()
						 ,."
     			              separator='":"'/>"<xsl:text/>

    </xsl:template>
    <xsl:template match="elem">
       <xsl:variable name="val">"<xsl:sequence
select="replace(.,',',concat($quot,',',$quot))"/>"</xsl:variable>
       "<xsl:value-of select="if (contains(local-name(),'__')) then
	                         substring-after(local-name(),'__') else
			         local-name()
			      ,$val"
		      separator='":['/>]<xsl:text/>

    </xsl:template>

If you type $val as xs:string+ you don't get the right result, if you
type it as xs:string it doesn't type check.

Michael's solution is enlightening.

Current Thread