XQuery - 环境搭建
本章详细介绍如何在本地开发环境中设置 XQuery 库。
我们使用的是广泛使用的开源独立 XQuery 处理器 Saxon Home Edition (Saxon-HE)。此处理器支持 XSLT 2.0、XQuery 3.0 和 XPath 3.0,并且针对性能进行了高度优化。Saxon XQuery 处理器无需任何 XML 数据库即可使用。在我们的示例中,我们将使用一个简单的 XML 文档作为我们的数据库。
为了使用 Saxon XQuery 处理器,您应该在应用程序的类路径中包含 saxon9he.jar、saxon9-test.jar、saxon9-unpack、saxon9-xqj.jar。这些 jar 文件可在下载文件 **SaxonHE9-6-0-1J.zip** 中找到。下载 SaxonHE9-6-0-1J.zip。
示例
我们将使用基于 Java 的 Saxon XQuery 处理器来测试 books.xqy,这是一个包含针对我们的示例 XML 文档(即 books.xml)的 XQuery 表达式的文件。
在这个例子中,我们将看到如何编写和处理一个查询,以获取价格大于 30 的书籍的标题元素。
books.xml
<?xml version="1.0" encoding="UTF-8"?> <books> <book category="JAVA"> <title lang="en">Learn Java in 24 Hours</title> <author>Robert</author> <year>2005</year> <price>30.00</price> </book> <book category="DOTNET"> <title lang="en">Learn .Net in 24 hours</title> <author>Peter</author> <year>2011</year> <price>40.50</price> </book> <book category="XML"> <title lang="en">Learn XQuery in 24 hours</title> <author>Robert</author> <author>Peter</author> <year>2013</year> <price>50.00</price> </book> <book category="XML"> <title lang="en">Learn XPath in 24 hours</title> <author>Jay Ban</author> <year>2010</year> <price>16.50</price> </book> </books>
books.xqy
for $x in doc("books.xml")/books/book where $x/price>30 return $x/title
XQueryTester.java
package com.tutorialspoint.xquery; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import javax.xml.xquery.XQConnection; import javax.xml.xquery.XQDataSource; import javax.xml.xquery.XQException; import javax.xml.xquery.XQPreparedExpression; import javax.xml.xquery.XQResultSequence; import com.saxonica.xqj.SaxonXQDataSource; public class XQueryTester { public static void main(String[] args){ try { execute(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (XQException e) { e.printStackTrace(); } } private static void execute() throws FileNotFoundException, XQException{ InputStream inputStream = new FileInputStream(new File("books.xqy")); XQDataSource ds = new SaxonXQDataSource(); XQConnection conn = ds.getConnection(); XQPreparedExpression exp = conn.prepareExpression(inputStream); XQResultSequence result = exp.executeQuery(); while (result.next()) { System.out.println(result.getItemAsString(null)); } } }
针对 XML 执行 XQuery 的步骤
步骤 1 − 将 XQueryTester.java 复制到任何位置,例如,**E:** > **java**
步骤 2 − 将 books.xml 复制到同一位置,**E:** > **java**
步骤 3 − 将 books.xqy 复制到同一位置,**E:** > **java**
步骤 4 − 使用控制台编译 XQueryTester.java。确保您的机器上已安装 JDK 1.5 或更高版本,并且已配置类路径。有关如何使用 JAVA 的详细信息,请参阅我们的 JAVA 教程
E:\java\javac XQueryTester.java
步骤 5 − 执行 XQueryTester
E:\java\java XQueryTester
输出
您将得到以下结果:
<title lang="en">Learn .Net in 24 hours</title> <title lang="en">Learn XQuery in 24 hours</title>
理解示例
books.xml 代表示例数据。
books.xqy 代表要对 books.xml 执行的 XQuery 表达式。我们将在下一章详细了解该表达式。
XQueryTester(一个基于 Java 的 XQuery 执行程序)读取 books.xqy,将其传递给 XQuery 表达式处理器,并执行该表达式。然后打印结果。