- 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