The following tip shows you how to combine Java and SAXON 8 in order to evaluate XQuery expressions. This application presumes that the XQuery expression is in an external file, called Q.xquery, and the XML file used for interrogation is called XML.xml:
//Javaimport java.io.File;import java.io.InputStream;import java.io.OutputStream;import java.io.FileInputStream;import java.util.Properties;import javax.xml.transform.OutputKeys;import javax.xml.transform.sax.SAXSource;import javax.xml.transform.stream.StreamResult;import org.xml.sax.InputSource;//SAXONimport net.sf.saxon.om.DocumentInfo;import net.sf.saxon.Configuration;import net.sf.saxon.om.NodeInfo;import net.sf.saxon.query.DynamicQueryContext;import net.sf.saxon.query.StaticQueryContext;import net.sf.saxon.query.XQueryExpression;import net.sf.saxon.trans.XPathException;public class XQueryExample { public static void main(String[] args) { //the Q.xquery file InputStream queryStream=null; String queryFileName="C://Data_Local//XML//XQuery//Q.xquery"; //documentul XML ce va fi interogat este reprezentat de //fisierul AircraftDealer.xml File XMLStream=null; String xmlFileName="C://Data_Local//XML//XQuery//XML.xml"; //print the result to the console OutputStream destStream=System.out; //compile the XQuery expression XQueryExpression exp=null; //create a Configuration object Configuration C=new Configuration(); //static and dynamic context StaticQueryContext SQC=new StaticQueryContext(C); DynamicQueryContext DQC=new DynamicQueryContext(C); //indentation Properties props=new Properties(); props.setProperty(OutputKeys.METHOD,"xml"); props.setProperty(OutputKeys.INDENT,"yes"); try{ queryStream=new FileInputStream(queryFileName); SQC.setBaseURI(new File(queryFileName).toURI().toString()); //compilation exp=SQC.compileQuery(queryStream,null); SQC=exp.getStaticContext(); }catch(net.sf.saxon.trans.XPathException e) {System.err.println(e.getMessage()); }catch(java.io.IOException e) {System.err.println(e.getMessage());} //get the XML ready try{ XMLStream=new File(xmlFileName); InputSource XMLSource=new InputSource(XMLStream.toURI().toString()); SAXSource SAXs=new SAXSource(XMLSource); DocumentInfo DI=SQC.buildDocument(SAXs); DQC.setContextNode(DI); //evaluating exp.run(DQC,new StreamResult(destStream),props); destStream.close(); }catch(net.sf.saxon.trans.XPathException e) {System.err.println(e.getMessage()); }catch (java.io.IOException e) {System.err.println(e.getMessage());} } }