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:
//Java
import 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;
//SAXON
import 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());}
}
}
No comments:
Post a Comment