2016-02-05 45 views
1

我將一個參數('articles-counter')從表單傳遞到eXist-db應用程序中的函數。如何解決傳遞給eXist-db中的XQuery函數的空參數

如果沒有通過(該字段不填寫),這個工程:

let $xmldb-food := 
    (
     let $articles-counter := 
      (
       let $counter-passed := request:get-parameter('articles-counter', '') 
       return 
        if ($counter-passed) then 
         $counter-passed 
        else() 
      ) 
     for $uri at $count in (1 to xs:integer($articles-counter)) 
     let $param := request:get-parameter(concat('article-uri-', $count), '') 
     return 
      if ($param ne '') then 
       string-join($param, ',') 
      else() 
    ) 

下一個例子沒有。它預計xs:integer(在for範圍內),但得到''。這裏發生了什麼?我認爲這幾乎是相同的:

let $xmldb-food := 
    (
     let $articles-counter := request:get-parameter('articles-counter', '') 
     for $uri at $count in (1 to xs:integer($articles-counter)) 
     let $param := request:get-parameter(concat('article-uri-', $count), '') 
     return 
      if ($param ne '') then 
       string-join($param, ',') 
      else() 
    ) 

是什麼''()(空序列)之間的區別?

回答

2

用空字符串調用xs:integer()構造函數會引發(動態運行時)錯誤。用空序列調用會返回一個空序列。

你可以用謂詞過濾掉空字符串(以及任何其他無效的整數值),以避免動態誤差條件:

for $uri at $count in (1 to xs:integer($articles-counter[. castable as xs:integer])) 
+0

非常感謝,優雅的和親的解決方案。起初,我用最簡單的if-then-else循環來處理它,它起作用,但這樣更好! –

相關問題