2010-09-10 18 views
12

में अन्यथा उपयोग करने के लिए कैसे करें यदि मैं xquery में किसी चर को मान निर्दिष्ट करने के लिए किसी शर्त को उपयोग करने का प्रयास कर रहा हूं। मुझे यकीन नहीं है कि यह कैसे करें।xquery असाइनमेंट

यह है कि मैं क्या करने की कोशिश की है:

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>' 

इस कोड को एक [XPST0003] अपूर्ण 'अगर' अभिव्यक्ति त्रुटि फेंकता है। क्या कोई इसे ठीक करने में मेरी सहायता कर सकता है?

इसके अलावा, कोई xqueries सीखने के लिए कुछ अच्छे ट्यूटोरियल सुझा सकता है।

धन्यवाद, सोनी

उत्तर

15

क्योंकि XQuery के conditional expression specificationकिसी और अभिव्यक्ति में हमेशा आवश्यक होता है है कि:

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

तो तुम दूसरा else खंड लिखने के लिए (उदाहरण के लिए, यह खाली अनुक्रम वापस आ सकते हैं):

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) ... 

कुछ स्पष्ट बग अल हैं इतना तय:

  • {computed तत्व कन्स्ट्रक्टर के आसपास {} की आवश्यकता नहीं है;
  • सबसे अधिक संभावना है, आप if($entry_type = ('package', 'libapp'))

के संबंध में XQuery ट्यूटोरियल चाहते हैं। W3CSchools's XQuery Tutorial एक बहुत अच्छा प्रारंभिक बिंदु है।

संबंधित मुद्दे