Hi Chris,

> Having worked with Saxon previously I was able to pass the XdmItem from
> one query to the context of another query - allowing further queries to
> be carried out, therefore I assumed I would be able to something similar
> with BaseX?

​Here are two ways to do so:​

​    QueryProcessor proc1 = new QueryProcessor("/MappingRequest/Mappings", context);
    Iter iter1 = proc1.iter();
    for(Item item1; (item1 = iter1.next()) != null;) {
      QueryProcessor proc2 = new QueryProcessor("Mapping", context);
      proc2.context(item1);
      Iter iter2 = proc2.iter();
      for(Item item2; (item2 = iter2.next()) != null;) {
        System.out.println(((ANode) item2).qname());
      }
    }

More compact (but may be less efficient if you do not want to process all results):

    QueryProcessor proc1 = new QueryProcessor("/MappingRequest/Mappings", context);
    for(Item item1 : proc1.value()) {
      for(Item item2 : new QueryProcessor("Mapping", context).context(item1).value()) {
        System.out.println(item2.serialize());
      }
    }


> Secondly to this I need to workout how to perform the queries via a
> ClientSession - however that only seems to return a ClientQuery where
> .next() returns a String, rather than a workable Item or other object.

​True; the solution above does not work with the client/server architecture. In that case, you’ll need to resort to XQJ or – which is what we usually do – do as much as possible in XQuery itself

Cheers,
Christian