[xquery-talk] if statement inside FLWOR-expressions

Wendell Piez wapiez at mulberrytech.com
Fri Aug 22 16:02:42 PDT 2008


Georg,

Just extend the logic:

   let $var1 := if ($item < 3) then 'abc' else 'def'
   let $var2 := if ($item < 3) then 'lmn' else 'opq'
   return <p>Text {$var1} ... {$var2}</p>

or further:

   let $lowitem := ($item < 3)
   let $var1 := if ($lowitem) then 'abc' else 'def'
   let $var2 := if ($lowitem) then 'lmn' else 'opq'
   [ ... etc. ...]
   return <p>Text {$var1} ... {$var2}</p>

Alternatively, use sequences, and index into them:

   let $var := if ($item < 3) then ('abc','lmn')
                              else ('def','opq')
   return <p>Text {$var[1]} ... {$var[2]}</p>

Cheers,
Wendell

At 05:14 AM 8/22/2008, you wrote:
>Jens Teubner wrote:
> >
> > On Fri, Aug 22, 2008 at 09:22:30AM +0200, Piewald, Georg wrote:
> >
> > >         if ($item < 3) then
> > >             let $var := 'abc'
> > >         else
> > >             let $var := 'def'
> > >         return
> > >             <p>Text {$var}</p>
> >
> > XQuery is a functional, expression-oriented language. What you want to
> > write is
> >
> >   let $var := if ($item < 3) then 'abc' else 'def'
> >   return <p>Text {$var}</p>
> >
> > Observe how the `if ...' does not imply a certain control
> > flow. Rather,
> > the entire clause is an expression that evaluates to either 'abc' or
> > 'def'.
>
>Thank you, that clearifies a lot. But now I want to go a step further.
>In my original problem I don't have only one variable $var to set in
>each of the if-branches, but several ones. So my original (and of course
>wrong) approach was
>
>          if ($item < 3) then
>              let $var1 := 'abc'
>              let $var2 := ...
>              ...
>          else
>              let $var1 := 'def'
>              let $var2 := ...
>              ...
>          return
>              <p>Text {$var1} text {$var2} </p>
>
>I don't see how to map this to the correct syntax in a straightforward
>way.


======================================================================
Wendell Piez                            mailto:wapiez at mulberrytech.com
Mulberry Technologies, Inc.                http://www.mulberrytech.com
17 West Jefferson Street                    Direct Phone: 301/315-9635
Suite 207                                          Phone: 301/315-9631
Rockville, MD  20850                                 Fax: 301/315-8285
----------------------------------------------------------------------
   Mulberry Technologies: A Consultancy Specializing in SGML and XML
======================================================================



More information about the talk mailing list