> On 11 Nov 2016, at 10:30, Michael MC<ller-Hillebrand mmh@xxxxxxxxx
<xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> Hi experts,
>
> We ran into an error that made me think about the idea of mixed data types
in sequences. Take this instance:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <bars>
> <bar foo="x"/>
> <bar/>
> </bars>
>
> We need to process all <bar> and want to have a default value if @foo is not
present. When trying this XPath:
>
> for $i in //bar/(@foo, 'no-foo')[1] return $i
>
> we get the error "XPath failed due to: Cannot mix nodes and atomic values in
the result of a path expression"
This is because the "/" operator is defined to remove duplicates and sort into
document order if the expression delivers nodes, but not if it delivers atomic
values. If it delivers a mixture, the semantics would become very unclear.
Hence the need for the "!" operator in 3.0.
>
> When building the XPath the following way it runs fine and creates a
sequence of an attribute and a string:
>
> for $b in //bar return for $i in $b/(@foo, 'no-foo')[1] return $i
Here each evaluation of "/" delivers either all-nodes, or all-atomic-values.
>
Michael Kay
Saxonica
|