[xquery-talk] Whitespace problem in CSV-like output
Yves Forkl
Y.Forkl at srz.de
Fri Oct 17 18:19:38 PDT 2008
I am very grateful to both of you for your valuable suggestions.
It is a bit disappointing to see that XQuery does not offer a simple,
general method to create CSV-type files, at least not in my case.
I have picked up the idea to use functions, but rather than
encapsulating the query, I (for now) prefer to put the string
manipulation operations into functions so that I can reuse them and use
them for parametrization.
So now I have:
xquery version "1.0" encoding "ISO-8859-1";
declare namespace saxon="http://saxon.sf.net/";
declare namespace my="http://xmlns.srz.de/yforkl/xquery/functions";
declare option saxon:output "method=text";
declare function my:join-fields-into-record
( $fields as xs:string*,
$delimiter as xs:string ) as xs:string {
concat(string-join($fields, $delimiter), " ")
} ;
declare function my:join-records-into-lines
( $records as xs:string* ) as xs:string {
string-join($records, "")
} ;
my:join-records-into-lines(
let $entries := /list/entry
for $property1 in distinct-values($entries/property1),
$property2 in distinct-values(
$entries[property1 = $property1]/property2)
let $selected_entries := $entries[property1 = $property1 and
property2 = $property2]
order by $property1, $property2
return(
my:join-fields-into-record(
($property1,
$property2,
translate(
xs:string(
sum(
for $quantity in $selected_entries/quantity
return xs:decimal(translate($quantity,
",",
".")))),
".",
",")),
";"))
)
NB: While the names of the functions seem to suggest that the line feed
should rather be appended in my:join-records-into-lines than in
my:join-fields-into-record, I don't see any easy way to do this.
Yves
More information about the talk
mailing list