[xquery-talk] Whitespace problem in CSV-like output

Per Bothner per at bothner.com
Fri Oct 17 03:19:25 PDT 2008


Yves Forkl wrote:
> Hi,
>
> from a very simple XML input, I would like to create a CSV-like 
> output, putting each record (as I see them) in a line of its own, with 
> its fields separated by some delimiter like a semicolon. 
A trick is to use text nodes, because that suppresses the extra spaces:

let $entries := doc("file:/home/bothner/tmp/demo.xml")/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(
      string-join(
        ($property1, $property2,
         replace(xs:string(
                   sum(for $quantity in $selected_entries/quantity
                       return xs:decimal(replace($quantity, ",", ".")))),
                 "\.",
                 ",")),
        ";"),
      text{"
"})

Produces:
A;33;2
B;22;0,5

(I haven't tested this on Saxon, just Qexo.)



More information about the talk mailing list