eXist db/xquery将输出序列化为csv

eXist db/xquery将输出序列化为csv,xquery,exist-db,Xquery,Exist Db,在我的网站(eXistDB,Xquery 3.1)上,用户可以下载动态生成的文档。我已经成功地为.pdf、.xml和.zip文件实现了此功能 现在我正在尝试将.csv输出序列化,但失败了 我得到以下错误: 检查功能参数1 参数1的实际基数与函数签名中声明的基数不匹配:。 期望基数:0或1,得到2 该错误在函数local:download()行let$binarysult:=util:string to binary($result,'UTF-8')中触发。 我认为我可以将一系列字符串传递给序列化

在我的网站(eXistDB,Xquery 3.1)上,用户可以下载动态生成的文档。我已经成功地为
.pdf
.xml
.zip
文件实现了此功能

现在我正在尝试将
.csv
输出序列化,但失败了

我得到以下错误:

检查功能参数1
参数1的实际基数与函数签名中声明的基数不匹配:。 期望基数:0或1,得到2

该错误在函数
local:download()
let$binarysult:=util:string to binary($result,'UTF-8')中触发。

我认为我可以将一系列字符串传递给序列化程序,然后序列化程序将有效地将每个项目输出到
.csv
文档中的一行中(创建一个换行符)

显然,我对
.csv
的序列化的理解是错误的,但我还没有弄清楚如何纠正这个错误。问题基本上是“如何将数据行输出到带有行返回的CSV”


提前感谢您的帮助。

我不熟悉eXist db,我不知道您是否需要字符串到二进制函数来返回CSV之类的文本结果,但我认为您可以使用
字符串联接($output,
;'))
local:output csv
函数中,或在另一个函数中与
util:string to binary(字符串连接($result,
;'),'UTF-8'一起使用它)
以确保向该函数传递单个字符串而不是字符串序列。

我不熟悉eXist db,也不知道是否需要字符串到二进制函数才能返回CSV之类的文本结果,但我认为可以使用
字符串连接($output,
;'))
local:output csv
函数中,或将其与
util:string to binary(string join($result,
;'),'UTF-8')一起用于另一个函数中,以确保将单个字符串传递给该函数,而不是一系列字符串。

完美。再次谢谢你,马丁。太好了。再次感谢你,马丁。
declare option exist:serialize "method=text media-type=text/csv"; 
declare function local:output-csv()
{
  $output := (concat("title1", ",", "title2"),concat("data1a", ",", "data2a"),concat("data1b", ",", "data2b"))
  return $output
};
declare function local:download()
{
 let $filename := "search_results.csv"
 let $result := local:output-csv()
 let $binaryresult := util:string-to-binary($result,'UTF-8')
 return 
      response:stream-binary($binaryresult,'text/csv',$filename)
};