如何解决传递给 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]))
我正在将参数 ('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]))