与序列类型不匹配:xs:integer

时间:2014-12-01 08:30:49

标签: database schema xquery

我只是在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

提前致谢。

1 个答案:

答案 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