|
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 |