XQuery/显示列表
外观
< XQuery
您在 XML 结构中有一个项目列表,您想在输出字符串中显示一个用逗号分隔的项目值列表。
XQuery 提供了 "string-join()" 函数,它可以接受一个项目序列和一个分隔符字符串,并创建一个带有分隔符的输出字符串,这些分隔符位于每个项目之间。函数的格式为:string-join(nodeset, separator)
,其中 nodeset 是一个节点列表,而 separator 是您想用来分隔值的字符串。
xquery version "1.0";
let $tags :=
<tags>
<tag>x</tag>
<tag>y</tag>
<tag>z</tag>
<tag>d</tag>
</tags>
return
<results>
<comma-separated-values>{
string-join($tags/tag, ',')
}</comma-separated-values>
</results>
<results>
<comma-separated-values>x,y,z,d</comma-separated-values>
</results>
我们将使用两个 "string-join()" 函数,一个用于所有行,另一个用于每一行。我们将创建一个大型字符串,然后使用 "response:stream()" 函数返回结果。
xquery version "1.0";
declare option exist:serialize "method=text media-type=text/csv omit-xml-declaration=yes";
(: The newline character used as a separator between lines :)
let $nl := " "
let $input :=
<rows>
<row>
<c1>Row1 Col1</c1>
<c2>Row1 Col2</c2>
<c3>Row1 Col3</c3>
<c4>Row1 Col4</c4>
</row>
<row>
<c1>Row2 Col1</c1>
<c2>Row2 Col2</c2>
<c3>Row2 Col3</c3>
<c4>Row2 Col4</c4>
</row>
<row>
<c1>Row3 Col1</c1>
<c2>Row3 Col2</c2>
<c3>Row3 Col3</c3>
<c4>Row3 Col4</c4>
</row>
<row>
<c1>Row4 Col1</c1>
<c2>Row4 Col2</c2>
<c3>Row4 Col3</c3>
<c4>Row2 Col4</c4>
</row>
</rows>
(: we construct a single string that has all the newlines and commas in the right places :)
let $file-as-csv-string :=
string-join(
for $row in $input//row
return
string-join(
for $col in $row/*
return
$col/text()
, ',')
, $nl)
(: set the HTTP response headers with the content type and file name :)
let $set-content-type := response:set-header('Content-Type', 'text/csv')
let $set-file-name := response:set-header('Content-Disposition', 'attachment; filename="my-table.csv"')
(: There is no documentation on what the stream options are.
http://exist-db.org/exist/apps/fundocs/view.html?uri=http://exist-db.org/xquery/response&location=java:org.exist.xquery.functions.response.ResponseModule
:)
return response:stream($file-as-csv-string, '')
返回值
Row1 Col1,Row1 Col2,Row1 Col3,Row1 Col4 Row2 Col1,Row2 Col2,Row2 Col3,Row2 Col4 Row3 Col1,Row3 Col2,Row3 Col3,Row3 Col4 Row4 Col1,Row4 Col2,Row4 Col3,Row4 Col4
"string-join()" 函数接受两个参数,第一个是待连接的字符串序列,第二个是分隔符。