Hi

I am experiencing the BaseX API XQJ and I compare to other XQJ NXD and I find the following problem.

Suppose we have the next XML file in database "test":

<?xml version="1.0" encoding="ISO-8859-1"?>
  <bookstore param="hao">
    <book>
      <title>Book01</title>
    </book>
    <book>
      <title>Book02</title>
    </book>
</bookstore>

If I execute:

    XQDataSource xqs = ...
    XQConnection conn = xqs.getConnection();
    XQExpression xqe = conn.createExpression();
    String cad= "collection('test')//title";

    XQResultSequence xqrs = xqe.executeQuery(cad);
    XMLStreamReader result = xqrs.getSequenceAsStream();
    System.out.println("Iteration on XMLStreamReader...");
    for(; result.hasNext(); result.next())
      System.out.println(getEventString(result));
   
    xqrs = xqe.executeQuery(cad);
    System.out.println("Using a Transformer...");
    Source resultXML = new StAXSource(xqrs.getSequenceAsStream());
    StreamResult resultSR = new StreamResult(System.out);
    TransformerFactory factory = TransformerFactory.newInstance();
    Transformer tr = factory.newTransformer();
    tr.setOutputProperty(OutputKeys.INDENT, "yes");
    tr.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
    tr.setOutputProperty("{http://xml.apache.org/xslt}indent-amount","2");
    tr.transform(resultXML, resultSR);


where
  static String getEventString(final XMLStreamReader reader) {
    switch(reader.getEventType()) {
      case XMLStreamConstants.START_ELEMENT:
        return "START_ELEMENT:\t\"" + reader.getLocalName() + "\"";
      case XMLStreamConstants.END_ELEMENT:
        return "END_ELEMENT:\t\"" + reader.getLocalName() + "\"";
      case XMLStreamConstants.START_DOCUMENT:
        return "START_DOCUMENT";
      case XMLStreamConstants.END_DOCUMENT:
        return "END_DOCUMENT";
      case XMLStreamConstants.CHARACTERS:
        return "CHARACTERS:\t\"" + reader.getText() + "\"";
    }
    return "";
  }


I get:
    Iteration on XMLStreamReader...
    START_ELEMENT:  "title"
    CHARACTERS:     "Book01"
    END_ELEMENT:    "title"
    END_DOCUMENT
    START_ELEMENT:  "title"
    CHARACTERS:     "Book02"
    END_ELEMENT:    "title"
    END_DOCUMENT
    Using a Transformer...
    <?xml version="1.0" encoding="UTF-8"?>
    <title>Book01</title>

It's not good!

When I use a Transformer I should get something similar to:
    <?xml version="1.0" encoding="UTF-8"?>
    <result>
      <title>Book01</title>
      <title>Book02</title>
    <result>

That is, if result sequence length is greater than 1, getSequenceAsStream should wrap the sequence in a containing result element, so to not break JAXP Transformers and XMLStreamReader events.

Is there any solution in BaseX ?  
Thanks a lot!


Isidre Guixà