eXist db/xquery将输出序列化为csv
在我的网站(eXistDB,Xquery 3.1)上,用户可以下载动态生成的文档。我已经成功地为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')中触发。 我认为我可以将一系列字符串传递给序列化
.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)
};