如何解决传递给eXist-db中的XQuery函数的空参数

时间:2016-02-05 11:25:59

标签: xquery exist-db

我将表单中的参数('articles-counter')传递给eXist-db应用程序中的函数。

如果没有传递任何内容(该字段未填写),则可以:

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:integerfor范围内)但得到''。这里发生了什么?我认为它几乎是一样的:

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

''()(空序列)有什么区别?

1 个答案:

答案 0 :(得分:2)

使用空字符串调用xs:integer()构造函数将引发(动态运行时)错误。使用空序列调用将返回空序列。

您可以使用谓词过滤掉空字符串(以及任何其他无效的整数值)以避免动态错误情况:

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