1

我正在尝试在撒克逊语中运行以下代码

map:merge(for $mov in doc("movies.xml")/movies/movie return map:entry($mov/@id, avg($mov/ratings/child::node())))

但是,我收到如下错误:

XPST0081: Namespace prefix 'map' has not been declared

我相信我需要在查询的开头设置命名空间。

所以我搜索了一下,在这里找到了答案,并修改了我的代码如下:

import module namespace map="http://www.w3.org/2005/xpath-functions/map";

map:merge(for $mov in doc("movies.xml")/movies/movie return map:entry($mov/@id, avg($mov/ratings/child::node())))

我得到另一个错误:XQST0059: Cannot locate module for namespace http://www.w3.org/2005/xpath-functions/map

我必须使用什么命名空间?

更新

我尝试了一个新代码

declare namespace map = "http://www.w3.org/2005/xpath-functions/map";
map:merge(for $mov in doc("movies.xml")/movies/movie return map:entry($mov/@id, avg($mov/ratings/child::node())))

并使用以下命令

java -cp saxon9ee.jar net.sf.saxon.Query -qversion:3.1 -o:out mapq.xq

我收到一个新错误如下

Error on line 2 at column 28 of file:mapq.xq
  Cannot serialize a map using the xml method
Query failed with dynamic error: Cannot serialize a map using the xml method
4

1 回答 1

1

使用declare namespace map = "http://www.w3.org/2005/xpath-functions/map";. 另请注意,直接输出地图需要输出方法adaptive!method=apaptive)或者json我认为。

作为替代方案,根据 Christian Grün 的评论,使用序言

declare namespace map = "http://www.w3.org/2005/xpath-functions/map";
declare namespace output = "http://www.w3.org/2010/xslt-xquery-serialization";
declare option output:method "adaptive";
于 2016-01-22T11:58:32.420 回答