Subject: Re: [xsl] XSLT 4: map serialization From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Wed, 25 Nov 2020 04:56:00 -0000 |
> works, but while this is doubtless a question of aesthetic bias I don't consider this solution more elegant than (or preferable to) the XSLT version The problem stated in the initial post was that: "This isn't allowed, because map:for-each() takes an XPath function, rather than an XQuery function, so it hasn't got access to element constructors" *The pure XPath solution is also an XQuery solution*, as XQuery is a superset of XPath. *As for elegance*, one can write a more elegant expression if one defines a separate inline XPath function: *let $makeElement := function($k, $v) {* * parse-xml('<' || $k '>' || $v '</' || $k '>' )* * return* * ($wordArchive ! $ makeElement('entry', map:for-each(., $makeElement ($k, $x)))* * ! parse-xml(.)* *}* Not tested, as I am not acquainted with the detailed specific problem, but a working solution would look similar and this is elegant and easy to read and understand. Not to mention that having a comprehensive library of XPath functions is both powerful and elegant as it provides a set of basic building blocks for potentially unlimited number and scope of problems. HTH, Dimitre On Tue, Nov 24, 2020 at 8:03 PM Graydon graydon@xxxxxxxxx < xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > On Wed, Nov 25, 2020 at 03:30:12AM -0000, Dimitre Novatchev > dnovatchev@xxxxxxxxx scripsit: > > > So if I have a sequence of maps, such as one gets from using > > > collection() with the metadata flag set in Saxon, and I want to > > > serialize the result just to see what is in there, I'd like to be > > > able to use: > > > > Demonstrated how to do this in pure XPath 7 years ago at the Balisage > > 2013 conference: > > > > > https://www.balisage.net/Proceedings/vol10/print/Novatchev01/BalisageVol10-No vatchev01.html#d240124e851 > > <xsl:sequence select=" > $wordArchive ! > ('<entry>' || (map:for-each(., function ($k, $x) { > if ($k eq 'fetch') then > '' > else > concat('<', $k, '>') || $x || concat('</', $k, '>') > })) => string-join('') || '</entry>') ! parse-xml(.)" /> > > works, but while this is doubtless a question of aesthetic bias I don't > consider this solution more elegant than (or preferable to) the XSLT > version. > > -- > Graydon Saunders | graydonish@xxxxxxxxx > CC&s oferC)ode, C0isses swC! mC&g. > -- Deor ("That passed, so may this.")
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XSLT 4: map serialization, Graydon graydon@xxxx | Thread | Re: [xsl] XSLT 4: map serialization, Liam R. E. Quin liam |
Re: [xsl] XSLT 4: map serialization, Graydon graydon@xxxx | Date | Re: [xsl] XSLT 4: map serialization, Liam R. E. Quin liam |
Month |