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 EngbersZD
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(), ' ')? Ben Engbers Best, Bridger
BE
Ben Engbers24 Feb 2022 17:14 #
Ok, at least in the GUI using 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()), " ")',
' 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 " " 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 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 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 ( )
Line endings can be fun.
Best Daniel
BD
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(), ' ')? > Ben Engbers >
Best,
Bridger
Written for BaseX 9.6. BaseX may have changed since: please check the current documentation.
⚡Generated with XQuery