[xquery-talk] Manipulating Maps In Non-Trivial Ways

Eliot Kimber ekimber at contrext.com
Sun Jul 19 08:40:22 PDT 2015

I don't know why I'm having such a hard time figuring out how to operate
on maps but I just can't get my head around it (I suspect procedural brain
damage but it could just be advancing age). I suspect others will or are
having the same challenge.

My challenge of the day is:

I have an existing map where each entry is a sequence mapped to a string
key, e.g.:

let $m1 := map{ 'key1' : (), 'key2' : () }

I then have a node and a set of key values. For each key I need to find
the entry with that key and add the node to the entry, e.g.

let $newKeys := ('key1', 'key3')
let $obj := <added/>

Let $m2 := for $key in $newKeys
               (: Find sequence for key,
                  Add obj to sequence,
                  Update map entry for new key

I think the right answer is to use map:merge like so:

let $m2 := 
    lor $key in $newKeys
        Map {$key, ($m1($key), $obj))}

Is my analysis correct? Is there a better way to do this sort of map


Eliot Kimber, Owner
Contrext, LLC

More information about the talk mailing list