The heart of the update expression is something like:
xdmp:node-insert-child($a/xm:meta, $new-node)
Each node-insert-child should add a node to the end of the existing children of
$a/xm:meta, like a FIFO. But "$a" is undefined, so it's difficult to predict
how this will evaluate. If you can provide a working test case, someone here
can probably tell you what is going awry.
-- Mike
On 19 Sep 2012, at 08:42 , Dominic Beesley wrote:
> Hi Damon,
>
> Thanks for the suggestion. I think something along those lines is the way
> I’ll have to go, just seems a bit odd having to rebuild a whole, quite large
> item rather than being able to poke a few in at the end!
>
> Thanks
>
> Dom
>
> From: [email protected]
> [mailto:[email protected]] On Behalf OfDamon Feldman
> Sent: 19 September 2012 14:20
> To: MarkLogic Developer Discussion
> Subject: Re: [MarkLogic Dev General] Multiple inserts, maintaining order
>
> Dominic,
>
> You could instead build the sequence, merge it together and then replace the
> whole meta node. Un-tested code:
>
> Let $new-fields := for …. return <xm:field type='subject-link'> <xa:link Let
> $old-meta := …
> Let $old-fields := $old-meta//xm:field
> Let $new-fields := ($old-fields, $new-fields)
> Let $new-meta :=
> <xm:meta> {
> {$old-meta/@*} (: keep all old attributes :)
> {$old-meta/node()[local-name(.) ne “field”] (: keep all nodes except
> fields :)
> {$new-fields} (: add merged fields at the bottom :)
> }
> </xm:meta>
>
> If you need the xm:meta to have the fields in the middle somewhere, that can
> be done, but is trickier.
>
> Yours,
> Damon
>
> From: [email protected]
> [mailto:[email protected]] On Behalf OfDominic Beesley
> Sent: Wednesday, September 19, 2012 9:08 AM
> To: 'MarkLogic Developer Discussion'
> Subject: [MarkLogic Dev General] Multiple inserts, maintaining order
>
> Hello,
>
> I’m trying to insert multiple nodes into a document, the nodes are getting
> inserted ok but the order is jumbled up.
>
> I’m guessing this is something to do with how transactions are committed
> after the script has finished.
>
> Is there an easy way round this or a way of building a set of nodes in the
> correct order and inserting them in one go to the parent?
>
> Thanks
>
> Dom
>
> Snippet:
>
> for $k in (
> for $kk in $keys
> return
> $tax2//a[@id=$kk]
> )
> order by xs:integer($k/@index) descending
> return
> (
> concat(' - ACTUAL=', $k/@name, ' - ', $k/@id, ' - ',
> $k/@index, ' '),
> xdmp:node-insert-child(
> $a/xm:meta,
> <xm:field type='subject-link'>
> <xa:link link-type='{
> concat($a/@type, "-taxonomy-subject-law") }' dest-id='{ $k/@id }' />
> </xm:field>
> )
> )
> _______________________________________________
> General mailing list
> [email protected]
> http://developer.marklogic.com/mailman/listinfo/general
_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general