Hi,

when I bind a DOM tree as the context item in XQJ against an XQuery script that performs updates, the passed DOM tree is not modified. Here is a groovy example

import groovy.xml.XmlUtil
import groovy.xml.DOMBuilder
import groovy.xml.dom.DOMCategory

import javax.xml.xquery.XQConstants

docbuilder = DOMBuilder.newInstance()
doc = docbuilder.sample() {
    renameMe(id:11) {
       renameInner(isit:"true","yes")
    }
    deleteMe(id:12) {
       alongWithMe("bummer")
    }
    insertBeforeMe(id:14) {
       alongWith(me:"true","Oh Yeah")
       andMe(too:"yes","Oh Yeah")
    }
    insertAfterMe(id:15) {
       atLevelThree(level:3) {
           atLevelFour(level:4, "fourth level")
           atLevelFour(level:4, "fourth level again")
       }
       alongWith(me:"true","Oh Yeah")
    }
}

// prints the DOM tree before updates
XmlUtil.serialize(doc, System.out) 

ds = Class.forName("org.basex.api.xqj.BXQDataSource").newInstance()

cnn = ds.getConnection()

stmt = """
let \$r := .
return (
    rename node \$r/renameMe as 'gotRenamed',
    delete node \$r/deleteMe[@id='12'],
    insert node 
        <gotInsertedBefore id='13'>
            <alongWithMe>Cool</alongWithMe>
        </gotInsertedBefore>
        before  \$r/insertBeforeMe[@id='14'],
    insert node 
        <gotInsertedAfter id='16'>
            <alongWithMe>Cool</alongWithMe>
        </gotInsertedAfter>
        after  \$r/insertAfterMe[@id='15']
)
"""

xe = cnn.prepareExpression(stmt)
xe.bindNode(XQConstants.CONTEXT_ITEM, doc, null)
xqs = xe.executeQuery()

// the DOM tree was not modified
XmlUtil.serialize(doc, System.out)

xqs.close()
xe.close()
cnn.close()

Should I pass it as an external variable instead?

Ciao
Stefano