Re: [xsl] Required item type of value of variable $images is element(); supplied value has item type text()

Subject: Re: [xsl] Required item type of value of variable $images is element(); supplied value has item type text()
From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx>
Date: Sun, 31 Mar 2019 20:25:34 -0000
If the template that's invoked returns text nodes, then the type check
as="element()*" is going to fail. (The function conversion rules are invoked,
but removal of whitespace text nodes isn't a conversion that ever happens). If
you want to filter out whitespace text nodes, you'll have to do it
explicitly.

Michael Kay
Saxonica

> On 31 Mar 2019, at 20:00, Martynas JuseviD
ius martynas@xxxxxxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hi,
>
> I have a simple snippet like this
>
>        <xsl:variable name="images" as="element()*">
>            <xsl:apply-templates mode="ac:image"/>
>        </xsl:variable>
>
> Sometimes the ac:image templates will return an <img> element,
> sometimes nothing.
>
> In the case where there are no elements in the variable, I get an error
>
>    Required item type of value of variable $images is element();
> supplied value has item type text()
>
> When I output the text, it's just whitespace.
>
> The element() cardinality is *, so why can't the processor just
> suppress the whitespace and treat the variable content as zero
> elements?
>
> The processor is Saxon-CE BTW.
>
> Martynas
> atomgraph.com

Current Thread