Subject: Re: [xsl] XQuery/XPath 3.1: Node List to Node Set ("distinct nodes") From: "Dimitre Novatchev dnovatchev@xxxxxxxxx" <xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 28 Dec 2021 23:32:05 -0000 |
On Tue, Dec 28, 2021 at 3:29 PM Dimitre Novatchev <dnovatchev@xxxxxxxxx> wrote: > A pure XPath solution: > > let $ids := distinct-values($nodes ! generate-id(.)) > return $ids ! (function($id) {$nodes[generate-id(.) eq $id][1]})(.) > > Happy New Year to all ! > Hit Send too early: Do notice: this seems the only solution of all presented so far, that preserves the original sequence order (not document order) of the nodes. > > On Tue, Dec 28, 2021 at 2:39 PM Wendell Piez wapiez@xxxxxxxxxxxxxxx < > xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: > >> Eliot and XSL-List, >> >> Along similar lines to $nodes | (), consider >> >> $nodes except () >> $nodes intersect $nodes >> >> I'm finding it difficult to argue what's most intuitive but I kind of >> like 'intersect'. Can't vouch for performance though. :-) >> >> Best wishes for 2022 -- >> Wendell >> >> >> >> >> On Tue, Dec 28, 2021 at 4:56 PM Michael Kay mike@xxxxxxxxxxxx < >> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: >> >>> You might consider >>> >>> $nodes | () >>> >>> a bit more intuitive. >>> >>> Michael Kay >>> Saxonica >>> >>> On 28 Dec 2021, at 19:23, Eliot Kimber eliot.kimber@xxxxxxxxxxxxxx < >>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> wrote: >>> >>> Hmph. >>> >>> That is certainly much more efficient p but is not necessarily obvious >>> (at least not to me). >>> >>> Thanks! >>> >>> E. >>> >>> _____________________________________________ >>> *Eliot Kimber* >>> Sr Staff Content Engineer >>> O: 512 554 9368 >>> >>> M: 512 554 9368 >>> servicenow.com <https://www.servicenow.com/> >>> LinkedIn <https://www.linkedin.com/company/servicenow> | Twitter >>> <https://twitter.com/servicenow> | YouTube >>> <https://www.youtube.com/user/servicenowinc> | Facebook >>> <https://www.facebook.com/servicenow> >>> >>> >>> *From: *Martin Honnen martin.honnen@xxxxxx < >>> xsl-list-service@xxxxxxxxxxxxxxxxxxxxxx> >>> *Date: *Tuesday, December 28, 2021 at 1:15 PM >>> *To: *xsl-list@xxxxxxxxxxxxxxxxxxxxxx <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> >>> *Subject: *Re: [xsl] XQuery/XPath 3.1: Node List to Node Set ("distinct >>> nodes") >>> >>> [External Email] >>> >>> >>> On 28.12.2021 20:10, Eliot Kimber eliot.kimber@xxxxxxxxxxxxxx wrote: >>> > I couldnbt find an answer in my google and markmail searching so I >>> > thought Ibd ask here: >>> > >>> > Given an arbitrary list of nodes that may contain duplicates, what is >>> > the most efficient way to reduce the node list to a set? >>> > >>> > The solution I came up with is a recursive function: >>> > >>> > (: >>> > >>> > Get the unique nodes from the supplied sequence >>> > >>> > @param nodes The sequence of nodes to evaluate >>> > >>> > @return A sequence of nodes such that each node in $nodes exists >>> exactly >>> > once. >>> > >>> > :) >>> > >>> > declare function dutils:distinctNodes($nodes as node()*) as node()* { >>> > >>> > dutils:_getDistinctNodes($nodes, ()) >>> > >>> > }; >>> > >>> > declare function dutils:_getDistinctNodes($nodes as node()*, >>> $resultList >>> > as node()*) as node()* { >>> > >>> > if (exists($nodes)) >>> > >>> > then >>> > >>> > let $node := head($nodes) >>> > >>> > return dutils:_getDistinctNodes(tail($nodes), ($resultList | $node)) >>> > >>> > else $resultList >>> > >>> > }; >>> > >>> > Which works but I feel like Ibm missing some obvious way to do this >>> more >>> > directly, but Ibm not seeing it. >>> > >>> > Am I missing a better solution? >>> >>> $nodes/. >>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> >>> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/293509> (by >>> email) >>> >>> >>> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> >>> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/174322> (by >>> email) >>> >> >> >> -- >> ...Wendell Piez... ...wendell -at- nist -dot- gov... >> ...wendellpiez.com... ...pellucidliterature.org... ...pausepress.org... >> ...github.com/wendellpiez... ...gitlab.coko.foundation/wendell... >> XSL-List info and archive <http://www.mulberrytech.com/xsl/xsl-list> >> EasyUnsubscribe <http://lists.mulberrytech.com/unsub/xsl-list/782854> (by >> email <>) >> > > > -- > 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.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] XQuery/XPath 3.1: Node Li, Dimitre Novatchev dn | Thread | Re: [xsl] XQuery/XPath 3.1: Node Li, Dimitre Novatchev dn |
Re: [xsl] XQuery/XPath 3.1: Node Li, Dimitre Novatchev dn | Date | Re: [xsl] XQuery/XPath 3.1: Node Li, Dimitre Novatchev dn |
Month |