0
{
    for $movie in distinct-values(doc("movies.xml")/movies/movie)
    where count(doc("movies.xml")/movies/movie[title=$movie/title]) = count(distinct-values(doc("movies.xml")/movies/movie/source))
    return
    <title> {$movie/title} </title> 
}

在这个特定的查询中,我尝试:查找“电影”文档中所有来源提供的电影标题。我在 where 子句的行上遇到错误。错误是:'/'的第一个操作数的必需项类型是节点();提供的值具有项目类型 xs:anyAtomicType

4

1 回答 1

0

问题是distinct-values()返回不同的字符串值,因此您尝试在字符串上使用 xpath 表达式。$movie/title评估(xs:string)/title哪个无效并引发异常。

但是按照我理解您的目标的方式,我认为该查询不会返回您想要的结果。试试这个解决方案来返回所有来源提供的电影标题:

let $sources-distinct-all := count(distinct-values(doc("movies.xml")/movies/movie/source))
for $title in distinct-values(doc("movies.xml")/movies/movie/title) 
let $sources-distinct-movie := count(distinct-values(doc("movies.xml")/movies/movie[title eq $title]/source))
where ($sources-distinct-all eq $sources-distinct-movie)
return $title
于 2012-10-31T19:08:09.573 回答