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

John Snelson john.snelson at oracle.com
Mon Oct 20 12:12:04 PDT 2008


Yves Forkl wrote:
> John Snelson wrote:
>> Yves Forkl wrote:
>>> 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.
>>
>> What would be simpler than what you have written here?
> 
> Well... Maybe an extension function like the one DataDirect XQuery seems 
> to offer, as he have learned? :-) Seriously, I was somehow puzzled about 
> the complexity of the whitespace problem in the simple task of writing 
> out some fields into the lines of a file.

Well, DataDirect's method seems to require you to construct a custom XML 
structure, and specify a implementation specific serialization method. 
Your current method requires that you create some strings, and join them 
with string-join(). I'm not sure there's a lot of difference between the 
two.

I agree that using a space as a separator between atomic items when 
outputting them can be confusing - but at other times it's actually very 
useful. It's now a widespread practice in both XQuery and XSLT 2.0, so I 
don't know how much it could be changed.

>>> 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.
>>
>> Redefine your functions like this:
>>
>> declare function my:join-fields-into-record
>>   ( $fields as xs:string*,
>>     $delimiter as xs:string ) as xs:string {
>>       string-join($fields, $delimiter)
>> } ;
>> declare function my:join-records-into-lines
>>   ( $records as xs:string* ) as xs:string {
>>       string-join($records, "
")
>> } ;
> 
> Sorry for being so terse. I meant: It would be natural to change the 
> functions exactly this way, but this will drop the line feed of the last 
> line in the output, which would be undesirable. So I prefer to keep the 
> functions unchanged, irrespectively of their slightly misleading names 
> (or rather use text nodes than functions to get whitespace right).

It would seem to be a bug if it drops the last line feed in the output.

John

-- 
John Snelson, Oracle Corporation            http://snelson.org.uk/john
Berkeley DB XML:            http://oracle.com/database/berkeley-db/xml
XQilla:                                  http://xqilla.sourceforge.net


More information about the talk mailing list