我只是在XQuery中运行一个简单的函数测试。以下是我的代码:
**declare function local:degreeofmatch($p as element(postings)) as xs:integer
{
let $q := $p//reqSkill
return $q/@level
};**
local:degreeofmatch(doc("posting.xml")/postings)
但是,我一直收到以下错误:
alax-run q8.xq
Type Error: Type of value '
()
' does not match sequence type: xs:integer
At File "q8.xq", line 1, characters 65-75
At File "q8.xq", line 7, characters 19-48
提前致谢。
答案 0 :(得分:1)
您的函数声明它将返回单个xs:integer
值,但看起来您正在尝试返回一系列无类型值。
但是,您的查询实际上并不匹配任何数据,这就是您看到错误的原因:
Type of value '
()
' does not match sequence type: xs:integer
在该消息中()
表示空序列,表示您未匹配任何数据。
我已更新您的函数以正确返回零或更多 xs:integer
的序列:
declare function local:degreeofmatch($p as element(postings)) as xs:integer*
{
let $q := $p//reqSkill
return
$q/xs:integer(@level)
};
local:degreeofmatch(doc("posting.xml")/postings)
您的查询可能与任何数据不匹配的原因有很多,但有两个常见的原因是:
1)您是否为doc
文档的posting.xml
函数提供了正确的URI?
您可以使用doc-available
函数进行检查。
2)您的数据是否在命名空间中?
您当前正在查询默认命名空间;如果您要搜索任何名称空间,可以使用/*:posting
代替/posting
和//*:reqSkill
代替//reqSkill