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

How to solve empty parameters passed to an XQuery function in 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: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 ()
    )

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

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

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

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