Subject: Re: [xsl] Cannot mix nodes and atomic values - how comes? From: "Michael Kay mike@xxxxxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Fri, 11 Nov 2016 11:21:51 -0000 |
> 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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Cannot mix nodes and atomic v, Michael Müller-Hille | Thread | Re: [xsl] Cannot mix nodes and atom, Michael Müller-Hille |
[xsl] Cannot mix nodes and atomic v, Michael Müller-Hille | Date | Re: [xsl] Cannot mix nodes and atom, Michael Müller-Hille |
Month |