Changes

Jump to navigation Jump to search
495 bytes added ,  09:58, 30 November 2017
=Conventions=
{{Mark|Updated with Version 9.0:}} All functions and errors in this module are assigned to the <code><nowiki>http://basex.org/modules/csv</nowiki></code> namespace, which is statically bound to the {{Code|csv}} prefix.<br/>All errors are assigned to the <code><nowiki>http://basex.org/errors</nowiki></code> namespace, which is statically bound to the {{Code|bxerr}} prefix.
==Conversion==
===XML: Direct, Attributes===
If the {{Code|direct}} or {{Code|attributes}} format is chosen, a CSV string is converted to XML as follows:
* The resulting XML document has a {{Code|<csv>}} root element.
===XQuery===
This format has been introduced with {{MarkVersion|Introduced with Version 9.0}}:. It is more flexible and light-weight than the old, discarded {{Code|map}} format.
With the {{Code|xquery}} format, CSV records can be are converted to a plain sequence of arrays:
* The resulting value will be a map with a {{Code|records}} and an optional {{Code|names}} key.
* The column names will be available if {{Code|header}} option is set to {{Code|true}}.
The CSV map can e.g. be accessed as follows: * <code>$csv?records[5]</code> returns all entries of the 5th record (row)* <code>$csv?records(2)</code> returns all entries of the 2nd field (column)* <code>$csv?names?*</code> returns the names of all fields (if available)* Return enumerated strings for all records:<pre class="brush:xquery">for $record at $pos in $csv?recordsreturn $pos || ". " || string-join($record?*, ', ')</pre> The resulting representation consumes less memory than XML-based formats, and values can be directly accessed without conversion. Thus, it is recommendable for very large inputs and for efficient ad-hoc processing. Before {{Version|9.0}}, a {{Code|map}} format was available, which was now replaced with the more flexible and light-weight {{Code|xquery}} format.
==Options==
|-
| width='120' | '''Signatures'''
|{{Func|csv:parse|$input as xs:string|document-node(element(csv))}}<br/>{{Func|csv:parse|$input as xs:string, $options as map(xs:string, item()*)?|item()}}
|-
| '''Summary'''
|-
| '''Errors'''
|{{Error|BXCS0001parse|#Errors}} the input cannot be parsed.
|}
|-
| width='120' | '''Signatures'''
|{{Func|csv:serialize|$input as nodeitem()?|xs:string}}<br/>{{Func|csv:serialize|$input as nodeitem()?, $options as map(xs:string, item()*)?|xs:string}}
|-
| '''Summary'''
|Serializes the node specified by {{Code|$input}} as CSV data, and returns using the result as specified {{Code|xs:string$options}}, and returns the result as string. Items Values can also be serialized as JSON if CSV with the standard [[Serialization|Serialization Parameter]] feature of XQuery:* The parameter {{Code|method}} is needs to be set to {{Code|csv}}.<br/>The , and* the options presented in this article need to be assigned to the {{Code|$optionscsv}} argument can be used to control the way the input is serializedparameter.
|-
| '''Errors'''
|{{Error|BXCS0002serialize|#Errors}} the input cannot be serialized.
|}
]``
let $options := map { 'format': 'xquery', 'header': true() }
let $data csv := csv:parse($text, $options)
return (
'Distinct values:',
let $records := $data?csv('records') for $name at $pos in $data?csv('names')?* let $values := $records?($pos)
return (
'* ' || $name || ': ' || string-join(distinct-values($values), ', ')
=Errors=
 
{{Mark|Updated with Version 9.0:}}
{| class="wikitable" width="100%"
|Description
|-
|{{Code|BXCS0001parse}}
| The input cannot be parsed.
|-
|{{Code|BXCS0002serialize}}
| The node cannot be serialized.
|}
* Added: {{Code|xquery}} option
* Removed: {{Code|map}} option
* Updated: error codes updated; errors now use the module namespace
;Version 8.6
Bureaucrats, editor, reviewer, Administrators
13,550

edits

Navigation menu