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(_at_)marost(_dot_)ca <
xsl-list-service(_at_)lists(_dot_)mulberrytech(_dot_)com> wrote:
On Wed, Nov 25, 2020 at 03:30:12AM -0000, Dimitre Novatchev
dnovatchev(_at_)gmail(_dot_)com 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-Novatchev01.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(_at_)gmail(_dot_)com
Þæs oferéode, ðisses swá mæg.
-- Deor ("That passed, so may this.")
--~----------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
EasyUnsubscribe: http://lists.mulberrytech.com/unsub/xsl-list/1167547
or by email: xsl-list-unsub(_at_)lists(_dot_)mulberrytech(_dot_)com
--~--