string-join with a newline separator?

Thursday, 24 February 2022 · 5 messages
BE
Ben Engbers24 Feb 2022 16:44 #

Hi,

My xml has the structure
<base>
   <element1>
     <al-group>
       <al>bla</al>
     </al-group>
   </element1>
   <element1>
     <al-group>
       <al>bla</al>
     </al-group>
     <al-group>
       <al>bla</al>
     </al-group>
   </element1>
</base>

The <al-group> element contains 1 to many <al> elements.

let $tekst := fn:string-join(fn:data($par//al/text()), ".") concatenates this to: bla.bla.bla But I want it to return: bla bla bla

Is it possible to add a newline item-separator to fn:string-join?

Ben Engbers

ZD
Zimmel, Danielin reply to Bridger Dyson-Smith, 24 Feb 2022, 17:5224 Feb 2022 16:56 #

or, if you prefer, you could even use a function for this, see https://docs.basex.org/wiki/Output_Module

out:nl()
Quoted text · BaseX-Talk · 37 lines
Von: BaseX-Talk <basex-talk-bounces at mailman.uni-konstanz.de> Im Auftrag von Bridger Dyson-Smith Gesendet: Donnerstag, 24. Februar 2022 16:57 An: Ben.Engbers at be-logical.nl Cc: Basex Mail-lijst <basex-talk at mailman.uni-konstanz.de> Betreff: Re: [basex-talk] string-join with a newline separator? Hi Ben, On Thu, Feb 24, 2022 at 10:44 AM Ben Engbers <Ben.Engbers at be-logical.nl<mailto:Ben.Engbers at be-logical.nl>> wrote: Hi, My xml has the structure <base> <element1> <al-group> <al>bla</al> </al-group> </element1> <element1> <al-group> <al>bla</al> </al-group> <al-group> <al>bla</al> </al-group> </element1> </base> The <al-group> element contains 1 to many <al> elements. let $tekst := fn:string-join(fn:data($par//al/text()), ".") concatenates this to: bla.bla.bla But I want it to return: bla bla bla Is it possible to add a newline item-separator to fn:string-join? how about string-join($input//al/text(), '&#10;')? Ben Engbers Best, Bridger
BE
Ben Engbers24 Feb 2022 17:14 #

Ok, at least in the GUI using &#10; as separator works. Is this a HTML-specific separator?

I use 'string-join' in R in the following statement:

Query_Stmt <-paste(
'import module namespace  functx = "http://www.functx.com";',
'for $Debat at $CountOuter in collection("Parliament"),',
'    $Turn in collection("Parliament")',
'    where $Turn/officiele-publicatie/metadata/meta/@content =
$Debat/officiele-publicatie/metadata/meta/@content',
'    and $CountOuter <=2',
'  let $debate-id := fn:analyze-string(',
'    $Debat/officiele-publicatie/metadata/meta/@content,
"(\\d{8}-\\d*-\\d*)")//fn:match/*:group[@nr="1"]/text()',
'  for $Speach at $CountInner in
$Turn/officiele-publicatie/handelingen/agendapunt/spreekbeurt',
'    let $Spreker := $Speach/spreker/naam/achternaam/text()',
'    let $Pol := $Speach/spreker/politiek/text()',
'    order by $debate-id, $CountInner',
'    for $par at $CountPar in
$Turn/officiele-publicatie/handelingen/agendapunt/spreekbeurt/tekst',
'       let $tekst := fn:string-join(fn:data($par//al/text()), "&#10;")',
'    return($debate-id, $Spreker, ($Pol, "n.v.t")[1], $CountPar, $tekst)'

When I use "." as item separator, this statement returns: $debate-id, $Spreker, ($Pol, "n.v.t")[1], $CountPar, $tekst1.$tekst2 But when I use "&#10;" it returns: $debate-id, $Spreker, ($Pol, "n.v.t")[1], $CountPar, $tekst1 NA NA NA NA $tekst2

(NA means Not Available)

So in R the &#10; is interpreted as a splitter. ;-(

I'll take a look at this and will let you know if I can find a solution.

Ben

ZD
Zimmel, Daniel24 Feb 2022 17:25 #
Quoted text · Ben Engbers · 2 lines
> Ok, at least in the GUI using &#10; as separator works. > Is this a HTML-specific separator?

no, this is the decimal notation of a line feed in UTF-8. Not sure what you environment expects your encoding, you might want to try carriage return instead (&#13;)

Line endings can be fun.

Best Daniel

BD
Bridger Dyson-Smithin reply to Ben Engbers, 24 Feb 2022, 16:4424 Feb 2022 17:52 #

Hi Ben,

Quoted text · Ben Engbers · 36 lines
On Thu, Feb 24, 2022 at 10:44 AM Ben Engbers <Ben.Engbers at be-logical.nl> wrote: > Hi, > > My xml has the structure > <base> > <element1> > <al-group> > <al>bla</al> > </al-group> > </element1> > <element1> > <al-group> > <al>bla</al> > </al-group> > <al-group> > <al>bla</al> > </al-group> > </element1> > </base> > > The <al-group> element contains 1 to many <al> elements. > > let $tekst := fn:string-join(fn:data($par//al/text()), ".") concatenates > this to: > bla.bla.bla > But I want it to return: > bla > bla > bla > > Is it possible to add a newline item-separator to fn:string-join? > > how about string-join($input//al/text(), '&#10;')? > Ben Engbers >

Best, Bridger


⚡Generated with XQuery