2016-01-22 57 views
0

我試圖在撒克遜運行下面的代碼命名空間在地圖撒克遜-EE

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

我相信我需要在查詢的開頭設置名稱空間。

所以我搜索了一點,找到了答案here和修改我的代碼如下:

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

我必須使用哪種命名空間?

UPDATE

我嘗試了新的代碼

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 
+0

新[自適應](https://www.w3.org/TR/xslt-xquery-serialization-31/#自適應輸出)方法將允許您輸出地圖。您可以將以下行添加到查詢的序言中: declare namespace output =「http://www.w3.org/2010/xslt-xquery-serialization」; 聲明選項輸出:方法「自適應」; - 在單獨的StackOverflow問題中討論它可能會更有意義。 –

+0

親愛的博士我使用下面的代碼 'declare namespace map =「http://www.w3.org/2005/xpath-functions/map」; declare namespace output =「w3.org/2010/xslt-xquery-serialization」; 聲明選項輸出:方法「自適應」; map:merge(for $ mov in doc(「movies.xml」)/ movies/movie return map:entry($ mov/@ id,avg($ mov/ratings/child :: node())))'Still說錯誤 –

+0

你能否請開一個新的問題? –

回答

1

使用declare namespace map = "http://www.w3.org/2005/xpath-functions/map";。另請注意,直接輸出地圖需要輸出方法adaptive!method=apaptive)或json我認爲。

作爲替代,基於基督教的格律恩的評論,請使用序言

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"; 
+0

嗨,請檢查更新 –

+0

假設撒克遜9.7,添加'!method = adaptive'到命令行,以便您的地圖結果可以序列化。 –

+0

'java -cp saxon9ee.jar net.sf.saxon.Query -qversion:3.1!method = adaptive mapq.xq' 'java -cp saxon9ee.jar net.sf.saxon.Query -qversion:3.1 method = adaptive mapq .xq' 這兩個都不行,恐怕 –