eXist-db / xquery 将输出序列化为 csv
eXist-db / xquery serialize output to csv
在我的网站(eXist-db,Xquery 3.1)上,用户可以下载动态生成的文件。我已经成功地为 .pdf
、.xml
和 .zip
文件实现了这个。
现在我试图将 .csv
输出序列化,但失败了。
我收到以下错误:
checking function parameter 1
The actual cardinality for parameter 1 does not match the cardinality declared in the function's signature: .
Expected cardinality: zero or one, got 2.
错误是在函数local:download()
中触发的let $binaryresult := util:string-to-binary($result,'UTF-8')
行
我想我可以将一系列字符串传递给序列化程序,然后序列化程序会有效地将每个项目输出到 .csv
文档中的一行(创建一行 return)。
显然我正在接近 .csv
的序列化错误,但一直无法弄清楚如何纠正这个问题。问题根本在于 "how to output data rows to a CSV with line returns".
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)
};
在此先感谢您的帮助。
我不熟悉 eXist-db,我不知道你是否需要一个字符串到二进制的函数来 return 像 CSV 这样的文本结果,但我认为你可以使用 string-join($output, ' ')
在 local:output-csv
函数中或在另一个函数中使用它与 util:string-to-binary(string-join($result, ' '), 'UTF-8')
以确保您将单个字符串而不是字符串序列传递给该函数。
在我的网站(eXist-db,Xquery 3.1)上,用户可以下载动态生成的文件。我已经成功地为 .pdf
、.xml
和 .zip
文件实现了这个。
现在我试图将 .csv
输出序列化,但失败了。
我收到以下错误:
checking function parameter 1
The actual cardinality for parameter 1 does not match the cardinality declared in the function's signature: . Expected cardinality: zero or one, got 2.
错误是在函数local:download()
中触发的let $binaryresult := util:string-to-binary($result,'UTF-8')
我想我可以将一系列字符串传递给序列化程序,然后序列化程序会有效地将每个项目输出到 .csv
文档中的一行(创建一行 return)。
显然我正在接近 .csv
的序列化错误,但一直无法弄清楚如何纠正这个问题。问题根本在于 "how to output data rows to a CSV with line returns".
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)
};
在此先感谢您的帮助。
我不熟悉 eXist-db,我不知道你是否需要一个字符串到二进制的函数来 return 像 CSV 这样的文本结果,但我认为你可以使用 string-join($output, ' ')
在 local:output-csv
函数中或在另一个函数中使用它与 util:string-to-binary(string-join($result, ' '), 'UTF-8')
以确保您将单个字符串而不是字符串序列传递给该函数。