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
|