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

Re: [xsl] Required item type of first argument of is node(); supplied value has item type xs:string


Subject: Re: [xsl] Required item type of first argument of <function> is node(); supplied value has item type xs:string
From: Spencer Tickner <spencertickner@xxxxxxxxx>
Date: Fri, 19 Feb 2010 13:52:14 -0800

Ok, then if I make the template more generic.. ie:

       <xsl:function name="qp:test" as="item()*"
xmlns:functx="http://www.qplegaleze.ca">
               <xsl:param name="n"/>

Is there a way to test if $n is a String?

Thanks,

Spencer

On Fri, Feb 19, 2010 at 1:39 PM, G. Ken Holman
<gkholman@xxxxxxxxxxxxxxxxxxxx> wrote:
> At 2010-02-19 13:30 -0800, Spencer Tickner wrote:
>>
>> I'm creating a function (so using 2.0), and this function should be
>> generic enough to handle pretty much anything I throw at it, so I set
>> the param type as node(). Trouble pops up though when I call a
>> function such as the upper-case() xslt function on the parameter being
>> passed in, as it's a string now, not a node.
>>
>> How can you convert a string to a text node?
>
> You cannot ... you can build a text node context free or in a temporary
tree
> from a string, but it will not have any ancestors or descendants (actually,
> in a temporary tree you could build ancestors .. but there is no
> relationship to the source node that was converted to upper case.
>
>> I put together an example of the problem I'm having below:
>>
>> <?xml version='1.0'?>
>> <xsl:stylesheet version="2.0"
>> B  B  B  B xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>> B  B  B  B xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>> B  B  B  B xmlns:qp="http://www.qplegaleze.ca"
>> B  B  B  B exclude-result-prefixes="qp xsd">
>>
>> B  B  B  B <xsl:function name="qp:test" as="item()*"
>> xmlns:functx="http://www.qplegaleze.ca">
>> B  B  B  B  B  B  B  B <xsl:param name="n" as="node()"/>
>
> <xsl:pram name="n" as="item()"/>
>
>> B  B  B  B  B  B  B  B <xsl:choose>
>
> <xsl:when test="not($n instance of node())">
> B <xsl:call-template name="doStuff">
> B  <xsl:with-param name="n" select="$n"/>
> B </xsl:call-template>
> </xsl:when>
>
> or, if you really need a node:
>
> <xsl:when test="not($n instance of node())">
> B <xsl:variable name="node">
> B  <xsl:value-of select="$n"/>
> B </xsl:variable>
> B <xsl:call-template name="doStuff">
> B  <xsl:with-param name="n" select="$node/text()"/>
> B </xsl:call-template>
> </xsl:when>
>
>> B  B  B  B  B  B  B  B  B  B  B  B <xsl:when
test="$n/descendant-or-self::*">
>> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B <xsl:apply-templates
select="$n"
>> mode="test"/>
>> B  B  B  B  B  B  B  B  B  B  B  B </xsl:when>
>> B  B  B  B  B  B  B  B  B  B  B  B <xsl:otherwise>
>> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B <xsl:call-template
name="doStuff">
>> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B <xsl:with-param
name="n"
>> select="$n"/>
>> B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B </xsl:call-template>
>> B  B  B  B  B  B  B  B  B  B  B  B </xsl:otherwise>
>> B  B  B  B  B  B  B  B </xsl:choose>
>> B  B  B  B </xsl:function>
>
> I hope this helps.
>
> . . . . . . . . . . Ken
>
> --
> XSLT/XQuery training: B  B  B after http://XMLPrague.cz 2010-03-15/19
> XSLT/XQuery training: B  B  B  B  San Carlos, California 2010-04-26/30
> Principles of XSLT for XQuery Writers: San Francisco,CA 2010-05-03
> XSLT/XQuery/UBL/Code List training: Trondheim,Norway 2010-06-02/11
> Vote for your XML training: B  http://www.CraneSoftwrights.com/s/i/
> Crane Softwrights Ltd. B  B  B  B  B http://www.CraneSoftwrights.com/s/
> G. Ken Holman B  B  B  B  B  B  B  B  mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
> Male Cancer Awareness Nov'07 B http://www.CraneSoftwrights.com/s/bc
> Legal business disclaimers: B http://www.CraneSoftwrights.com/legal


Current Thread
Keywords