2010-09-10 19 views
12

Tôi đang cố gắng sử dụng một điều kiện nếu để gán một giá trị cho một biến trong một xquery. Tôi không chắc chắn làm thế nào để làm điều này.làm thế nào để sử dụng nếu khác trong xquery giao

Đây là những gì tôi đã cố gắng:

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

Mã này ném một [XPST0003] Incomplete 'nếu' lỗi diễn đạt. Ai đó có thể giúp tôi sửa lỗi này không?

Ngoài ra, ai đó có thể đề xuất một số hướng dẫn hay để tìm hiểu xqueries.

Cảm ơn, Sony

Trả lời

15

Đó là bởi vì trong conditional expression specificationkhác thể hiện XQuery của luôn yêu cầu:

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

Vì vậy, bạn phải viết thứ hai else khoản (ví dụ, nó có thể trở lại chuỗi rỗng):

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

Một số lỗi rõ ràng là được sửa cố định:

  • không cần {} xung quanh hàm tạo phần tử đã tính;
  • rất có thể, bạn muốn if($entry_type = ('package', 'libapp'))

Về hướng dẫn XQuery. W3CSchools's XQuery Tutorial là điểm khởi đầu khá tốt.

Các vấn đề liên quan