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