我将表单中的参数('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 ()
)
''
和()
(空序列)有什么区别?
答案 0 :(得分:2)
使用空字符串调用xs:integer()
构造函数将引发(动态运行时)错误。使用空序列调用将返回空序列。
您可以使用谓词过滤掉空字符串(以及任何其他无效的整数值)以避免动态错误情况:
for $uri at $count in (1 to xs:integer($articles-counter[. castable as xs:integer]))