devxlogo

Evaluate XQuery Expressions with Java and SAXON 8

Evaluate XQuery Expressions with Java and SAXON 8

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());}                              }   }

devx-admin

Share the Post: