basex - XQuery Replace Value With Conditional Failing -


i in middle of creating xquery replace-value of node action in xquery.

but seems code not working therefore if-else statement going else.

this code:

declare function local:replacing($contextdata element())  element()* {         copy $pipeline := $contextdata/handler/data/*       modify(     if(not(empty(data($pipeline/payload/sample/transactiontype))))       replace value of node $pipeline/payload/sample/transactiontype 'xxx' else (),    if(not(empty(data($pipeline/payload/sample/revision))))      replace value of node $pipeline/payload/sample/revision 'xxx' else ()        )  return $pipeline  }; 

i try against sample xml result not xxx when field revision having value. (this goes else statement)

let $result := <root> <handler>   <data>     <root>        <payload>             <sample>             <transactiontype></transactiontype>             <revision>123</revision>             <board>1</board>             <mission>1</mission>             <method>manual</method>             <listofboard>               <board>                 <type>small</type>                 <amount>5054</amount>                 <token>300</token>               </board>             </listofboard>             <pricing>300</pricing>             <playing>wed</playing>           </sample>        </payload>      </root>    </data> </handler> </root> 

current result:

<root>   <payload>     <sample>       <transactiontype/>       <revision>123</revision>       <board>1</board>       <mission>1</mission>       <method>manual</method>       <listofboard>         <board>           <type>small</type>           <amount>5054</amount>           <token>300</token>         </board>       </listofboard>       <pricing>300</pricing>       <playing>wed</playing>     </sample>   </payload> </root> 

expected result

<root>       <payload>         <sample>           <transactiontype/>           <revision>xxx</revision>           <board>1</board>           <mission>1</mission>           <method>manual</method>           <listofboard>             <board>               <type>small</type>               <amount>5054</amount>               <token>300</token>             </board>           </listofboard>           <pricing>300</pricing>           <playing>wed</playing>         </sample>       </payload>     </root> 

any ideas this?

update

as recommended har below, change code into:

 if(not(empty(data($pipeline/payload/sample/transactiontype))))               replace value of node $pipeline/payload/sample/transactiontype 'xxx'          else (             if(not(empty(data($pipeline/payload/sample/revision))))             replace value of node $pipeline/payload/sample/revision 'xxx' else ()          ) 

but seems result same. still goes else () statement. ideas?

thank before.

the problem was, empty() checks empty sequence, sequence containing 1 empty string considered true empty(). can pass data() result if since empty has effective boolean value of false :

if(data($pipeline/payload/sample/transactiontype))      replace value of node $pipeline/payload/sample/transactiontype 'xxx' else (), if(data($pipeline/payload/sample/revision))     replace value of node $pipeline/payload/sample/revision 'xxx' else () 

Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo