package org.basex.examples.xqj.cfoster;
import java.io.*;
import javax.xml.stream.*;
import javax.xml.xquery.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
/**
* XQJ Example, derived from the XQJ Tutorial
* <a href="http://www.cfoster.net/articles/xqj-tutorial">
* http://www.cfoster.net/articles/xqj-tutorial</a> from Charles Foster.
*
* Part 6: Streaming XQuery results.
*
* @author BaseX Team 2005-17, BSD License
*/
public final class Part6 extends Main {
/**
* Main method of the example class.
* @param args (ignored) command-line arguments
* @throws Exception exception
*/
public static void main(final String... args) throws Exception {
init("6: Streaming XQuery results");
// Create the connection
XQConnection conn = connect();
// Stream XQuery Result Sequences with StAX
info("Stream XQuery Result Sequences with StAX");
XQExpression xqe = conn.createExpression();
String path = new File("src/main/resources/xml").getAbsolutePath();
XQResultSequence rs = xqe.executeQuery(
"doc('" + path + "/books.xml')//book");
XMLStreamReader reader = rs.getSequenceAsStream();
for(; reader.hasNext(); reader.next())
System.out.println(getEventString(reader));
// Print tailing END_DOCUMENT event too
System.out.println(getEventString(reader));
// Streaming XQuery Result Sequences with SAX
info("Stream XQuery Result Sequences with SAX");
rs = xqe.executeQuery("doc('" + path + "/books.xml')//book");
rs.writeSequenceToSAX(new MySAXHandler());
// Closing connection to the Database.
close(conn);
}
/**
* Returns the correspondent event string.
* @param reader stream reader
* @return event string
*/
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 "";
}
/**
* SAX Handler.
*/
static class MySAXHandler extends DefaultHandler {
@Override
public void startDocument() {
System.out.println("Start Document");
}
@Override
public void startElement(final String u, final String name, final String qn,
final Attributes a) {
System.out.println("Start Element:\t\"" + name + '"');
}
@Override
public void endElement(final String u, final String name, final String qn) {
System.out.println("End Element:\t\"" + name + '"');
}
@Override
public void characters(final char[] ch, final int start, final int len) {
System.out.println("Characters:\t\"" + new String(ch, start, len) + '"');
}
@Override
public void endDocument() {
System.out.println("End Document");
}
}
}