package org.basex.examples.xqj.tutorial;
import java.io.*;
import javax.xml.namespace.*;
import javax.xml.parsers.*;
import javax.xml.xquery.*;
import org.w3c.dom.*;
/**
* XQJ Examples, derived from an
* <a href="https://www.progress.com/products/data-integration-suite/data-integration-suite-developer-center/data-integration-suite-tutorials/learning-xquery/introduction-to-the-xquery-api-for-java-xqj-">
* XQJ online tutorial</a>.
*
* Part 3: Querying Data from XML Files or Java XML APIs.
*
* @author BaseX Team 2005-17, BSD License
*/
public final class Part3 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("3: Querying Data from XML Files or Java XML APIs");
// Create a connection
XQConnection xqc = connect();
// Create and execute an expression
String path = new File("src/main/resources/xml").getAbsolutePath();
XQExpression xqe = xqc.createExpression();
String query = "doc('" + path + "/orders.xml')//order[id='174']";
XQSequence xqs = xqe.executeQuery(query);
print("Query: " + query, xqs);
// Create and execute a second expression
query = "doc('" + path + "/orders.xml')//order[id='267']";
xqs = xqe.executeQuery(query);
if(xqs.next()) print("Query: " + query, xqs);
// Prepare an expression
query = "declare variable $id as xs:string external; " +
"doc('" + path + "/orders.xml')//order[id=$id]";
XQPreparedExpression xqp = xqc.prepareExpression(query);
// Bind a variable and execute the query
xqp.bindString(new QName("id"), "174", null);
xqs = xqp.executeQuery();
if(xqs.next()) print("Prepared query, $id=\"174\":", xqs);
// Bind a second variable and execute the query
xqp.bindString(new QName("id"), "267", null);
xqs = xqp.executeQuery();
if(xqs.next()) print("Prepared query, $id=\"267\":", xqs);
// Create {@link Document} instance
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document dom = builder.parse(path + "/orders.xml");
// Bind document to context item
xqe = xqc.createExpression();
xqe.bindNode(XQConstants.CONTEXT_ITEM, dom, null);
// Execute query
query = ".//order[id='174']";
xqs = xqe.executeQuery(query);
if(xqs.next()) print("Query: " + query, xqs);
// Execute a query from a file input stream
try(InputStream is = new FileInputStream(path + "/orders.xq")) {
xqs = xqe.executeQuery(is);
if(xqs.next()) print("Query from input stream", xqs);
}
// Close the connection
close(xqc);
}
}