- From: Dimitre Novatchev <dnovatchev@gmail.com>
- Date: Sat, 9 Jan 2021 12:48:37 -0800
- To: Michael Kay <mike@saxonica.com>
- Cc: public-xslt-40@w3.org
- Message-ID: <CAK4KnZcZOUPa9GQ_sQLAKOngSphz2xyWrB=9RRjXZyVhDCy_zg@mail.gmail.com>
In the provided solution, this: <xsl:param name="pMemberSource" as="element()"/> needs to be: <xsl:param name="pMemberSource" as="element()*"/> On Sat, Jan 9, 2021 at 12:46 PM Dimitre Novatchev <dnovatchev@gmail.com> wrote: > > > On Sat, Jan 9, 2021 at 11:54 AM Michael Kay <mike@saxonica.com> wrote: > >> Let's do a use case: converting >> >> <hiistory> >> <created by="Michael Kay" on="2016-12-19"/> >> <modified by="Michael Kay" on="2017-08-10" change="more precise >> result assertion"/> >> <modified by="Michael Kay" on="2019-12-02" change="Test wrongly >> assumed that document order was predictable.'"/> >> </history> >> >> to JSON: >> >> [ >> { "event": "created", >> "by" : "Michael Kay", >> "on" : "2016-12-19" }, >> >> {"event" : "modified: >> "by" : "Michael Kay", >> "on" : "2017-08-10", >> "change" : "more precise result assertion" }, >> >> {"event" : "modified: >> "by" : "Michael Kay", >> "on" : "2019-12-02", >> "change" : "est wrongly assumed that document order was >> predictable." } >> ] >> >> I want to do this using template rules. Something like this: >> >> <xsl:output method="json"/> >> >> <xsl:template match="history"> >> <xsl:array> >> <xsl:apply-templates/> >> </xsl:array> >> </xsl:template> >> >> <xsl:template match="history/*"> >> <xsl:array-member> >> <xsl:map> >> <xsl:map-entry key="'event'" select="local-name()"/> >> <xsl:apply-templates select="@*"/> >> </xsl:map> >> </xsl:array-member> >> </xsl:template> >> >> <xsl:template match="@*"> >> <xsl:map-entry key="local-name()" select="."/> >> </xsl:template> >> >> How would you want to write this? >> > > > I would prefer the proposed syntax, providing a member-generator function > as the value of the member-generator attribute: > > <xsl:output method="json"/> > > <xsl:template match="history"> > <xsl:array member-source="*" member-generator="my:mapHistory"/> > </xsl:template> > > <xsl:function name="my:mapHistory" as="item()*"> > <xsl:param name="pIndex" as="xs:integer"/> > <xsl:param name="pMemberSource" as="element()"/> > > <xsl:variable name="vMember" select="$pMemberSource [$pIndex]"/> > > <xsl:sequence select= > "map:merge( > (map-entry('event' : $vMember/local-name(), > for $mem in $vMember/@* > return > map:entry($mem/local-name(), > $mem/string()) > ) > ) > "/> > </xsl:function> > > > Thanks, > Dimitre > > >> >> Michael Kay >> Saxonica >> >> >> >> > > -- > Cheers, > Dimitre Novatchev > --------------------------------------- > Truly great madness cannot be achieved without significant intelligence. > --------------------------------------- > To invent, you need a good imagination and a pile of junk > ------------------------------------- > Never fight an inanimate object > ------------------------------------- > To avoid situations in which you might make mistakes may be the > biggest mistake of all > ------------------------------------ > Quality means doing it right when no one is looking. > ------------------------------------- > You've achieved success in your field when you don't know whether what > you're doing is work or play > ------------------------------------- > To achieve the impossible dream, try going to sleep. > ------------------------------------- > Facts do not cease to exist because they are ignored. > ------------------------------------- > Typing monkeys will write all Shakespeare's works in 200yrs.Will they > write all patents, too? :) > ------------------------------------- > Sanity is madness put to good use. > ------------------------------------- > I finally figured out the only reason to be alive is to enjoy it. > > -- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- Never fight an inanimate object ------------------------------------- To avoid situations in which you might make mistakes may be the biggest mistake of all ------------------------------------ Quality means doing it right when no one is looking. ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play ------------------------------------- To achieve the impossible dream, try going to sleep. ------------------------------------- Facts do not cease to exist because they are ignored. ------------------------------------- Typing monkeys will write all Shakespeare's works in 200yrs.Will they write all patents, too? :) ------------------------------------- Sanity is madness put to good use. ------------------------------------- I finally figured out the only reason to be alive is to enjoy it.
Received on Saturday, 9 January 2021 20:49:03 UTC