Hello!!
I am quite new with XQuery and i’ve a problem with if-sentence.
I want to replace a node if the condition is true, else insert a node. The problem is the following one. I need to prove that two attributes of the same node!!! and I don’t know how do it!!
This is my Query:
1)update
2) if (document(“D:/AGENCIA.xml”)//AGENCIA/VUELO[@CODIGO=“ZARMAD1”]/PLAZA[@NUMERO=“01”])
3) then
4) replace document(“D://AGENCIA.xml”)//AGENCIA/VUELO[@CODIGO=“ZARMAD1”]/PLAZA[@NUMERO=“01”]
5) with
6) Mr Smith
7)
8) else
9) insert
10) MR Smith
11) 70
12) Bussines
13)
14) into document(“D:/AGENCIA.xml”)//AGENCIA/VUELO[@CODIGO=“ZARMAD1”]/PLAZA;
15)document(“D:/AGENCIA.xml”)
In line 2 is my problem:
PLAZA has two attributes NUMERO adn LIBRE, and I want to do something like :
if(CODIGO=“code” and LIBRE=“TRUE”) but in Xquery of course, could some of you help me, please?
Thanks a lot
Mar
Hello,
you can simulate an if by 2 where expressions
according the approach described below.
Best regards
Walter
if (booleanExpression)
then (expression1)
else (expression2)
is equivalent to Tamino XQuery
let $condition := (booleanExpression)
return (
let $d := “then”
where $condition
return (expression1),
let $d := “else”
where not($condition)
return (expression2),
)
If the conditional expression is not contained in filter or sort expression (it is independent of the context item) then a simpler expression can be used:
let $condition := (booleanExpression)
return ( (expression1)[$condition], (expression2) [not($condition)] )
Example
? W3C XQuery
if (input()/cruise[price = 1088])
then ( )
else ( )
? Tamino XQuery 4
let $condition := (input()/cruise[price = 1088])
return
(let $d := “then”
where $condition
return ,
let $d := “else”
where not($condition)
return )
more simpler case
? W3C XQuery
if (count($b/author) > 2)
then
else ()
? Tamino XQuery 4
let $a:= “then”
where (count($b/author) > 2)
return