Before i show you some more xquery examples, i found a page at oracle.com which illustrates the use of xquery without XMLDB. But it looks like it uses a newer release of xquery than available in JDeveloper 10.1.3.2. The xquery library in 10.1.3.2 doesn’t use a XQueryResultSet.
The following example displays how to use variables with xquery:
XQueryContext ctx = new XQueryContext();
String query =
"declare variable $title external; " +
"for $i in doc('file:///c:/temp/books.xml')//book " +
"where $i/title/text() = $title " +
"return $i";
PreparedXQuery xquery = ctx.prepareXQuery(query);
xquery.setString(new QName("title"), "Xml primer");
XMLSequence seq = xquery.executeQuery();
while (seq.next()) {
XMLItem item = seq.getCurrentItem();
item.getNode().print(System.out);
}
Using external variables you can also specify the xml document that you want to query:
XQueryContext ctx = new XQueryContext();
String query =
"declare variable $doc external; " +
"declare variable $title external; " +
"for $i in doc($doc)//book " +
"where $i/title/text() = $title " +
"return $i";
PreparedXQuery xquery = ctx.prepareXQuery(query);
xquery.setString(new QName("doc"), "file:///c:/temp/books.xml");
xquery.setString(new QName("title"), "Xml primer");
XMLSequence seq = xquery.executeQuery();
while (seq.next()) {
XMLItem item = seq.getCurrentItem();
item.getNode().print(System.out);
}
If you want to query a dom tree:
XQueryContext ctx = new XQueryContext();
String query =
"declare variable $title external; " +
"for $i in .//book " +
"where $i/title/text() = $title " +
"return $i";
PreparedXQuery xquery = ctx.prepareXQuery(query);
xquery.setString(new QName("title"), "Xml primer");
// parse input document
DOMParser parser = new DOMParser();
parser.parse(new URL("file:///c:/temp/books.xml"));
// set context document
OXMLItem xmlItem = xquery.createItem();
xmlItem.setNode((XMLNode)parser.getDocument().getDocumentElement());
xquery.setContextItem(xmlItem);
// get result
XMLSequence seq = xquery.executeQuery();
while (seq.next()) {
XMLItem item = seq.getCurrentItem();
item.getNode().print(System.out);
}

