I'll read your response more carefully, but key takeaway is to maybe use something else? I'm futzing with powershell, seems reasonable for the task (if a bit odd).

On 2020-02-15 11:47 a.m., Graydon wrote:
On Sat, Feb 15, 2020 at 11:12:36AM -0800, thufir scripsit:
What I'm trying to export to, CSV:

joe,phone1,phone2,phone3,
sue,cell4 ,home5,,
alice,atrib6,x7,y9,z10

This is the outcome you want?

What needs to be done so that it can be exported to CSV:


<ul>
   <li>joe</li>
   <ul>phone1</ul>
   <ul>phone2</ul>
   <ul>phone3</ul>
   <li>sue</li>
   <ul>cell4</ul>
   <ul>home5</ul>
   <li>alice</li>
   <ul>atrib6</ul>
   <ul>x7</ul>
   <ul>y9</ul>
   <ul>z10</ul>
</ul>

This isn't flat.  Which means you have a column mapping problem.

Does the thing expecting the CSV have a fixed list of columns?  Do you
know what that is? (If the first answer is "yes" and the second answer
is "no", or if the first answer is unknown, that's the first thing to
do.)

is what I see in the documentation, but not sure how to get there.

Generally speaking XQuery is not the best option for transforming XML
content.

There is no requirement to use the CSV functions; those are there to be
convenient, and if they're not convenient you don't have to use them.

That vaguely-list thing thing you referenced needs to be split; the
usual way in XQuery would be tumbling windows.
http://docs.basex.org/wiki/XQuery_3.0#window

One you've got a single record,

string-join($record/descendant::text(),',')

will give you one row of CSV. It won't necessarily look like you want it
to; that column mapping problem again.

You can use file:write-text-lines, which appends line ending characters
for you, so something like:

file:write-text-lines('path/to/file.csv',for $record in $data return 
string-join($record/descendant::text(),','))

will get you a CSV file.

The fun part is likely to be some combination of the column mapping and
the tumbling windows.

-- Graydon

Reply via email to