2010-09-10 10 views
12

Sto provando a usare una condizione if per assegnare un valore a una variabile in un xquery. Non sono sicuro di come farlo.come usare if else in xquery assignment

Questo è quello che ho provato:

declare namespace libx='http://libx.org/xml/libx2'; 
declare namespace atom='http://www.w3.org/2005/Atom'; 
declare variable $entry_type as xs:string external; 
let $libx_node := 
    if ($entry_type = 'package' or 'libapp') then 
     {element {fn:concat("libx:", $entry_type)} {()} } 
    else if ($entry_type = 'module') then 
     '<libx:module> 
     <libx:body>{$module_body}</libx:body> 
     </libx:module>' 

Questo codice genera un [XPST0003] Incomplete 'se' errore di espressione. Qualcuno può aiutarmi a risolvere questo problema?

Inoltre, qualcuno può suggerire dei buoni tutorial per imparare xqueries.

Grazie, Sony

risposta

15

Ecco perché in conditional expression specificationaltro espressione di XQuery è sempre necessario:

[45] IfExpr ::= "if" "(" Expr ")" "then" ExprSingle "else" ExprSingle 

Così si devono scrivere secondo else clausola (ad esempio, si può restituire una sequenza vuota):

declare namespace libx='http://libx.org/xml/libx2'; 
declare namespace atom='http://www.w3.org/2005/Atom'; 
declare variable $entry_type as xs:string external; 

let $libx_node := 
     if ($entry_type = ('package','libapp')) then 
      element {fn:concat("libx:", $entry_type)} {()} 
     else if ($entry_type = 'module') then 
      <libx:module> 
      <libx:body>{$module_body}</libx:body> 
      </libx:module> 
     else() 
... (your code here) ... 

Alcuni bug ovvi sono tutti così fisso:

  • non hanno bisogno di {} attorno al costruttore di elementi calcolati;
  • molto probabilmente, si vuole if($entry_type = ('package', 'libapp'))

Per quanto riguarda tutorial XQuery. Il W3CSchools's XQuery Tutorial è un buon punto di partenza.