XQuery入门程序
精华
小牛编辑
183浏览
2023-03-14
以下是一个示例XML文档,其中包含各种书籍的记录。
文件:books.xml 的文件内容如下 -
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book category="JAVA">
<title lang="en">15天搞定Java</title>
<author>Maxsu</author>
<year>2015</year>
<price>30.00</price>
</book>
<book category="DOTNET">
<title lang="en">15天搞定.Net</title>
<author>Susen</author>
<year>2018</year>
<price>40.50</price>
</book>
<book category="XML">
<title lang="en">3天搞定XQuery</title>
<author>Yizhi</author>
<author>Maxsu</author>
<year>2016</year>
<price>50.00</price>
</book>
<book category="XML">
<title lang="en">24小时搞定XPath</title>
<author>Jazz Bee</author>
<year>2019</year>
<price>16.50</price>
</book>
</books>
以下是一个示例Xquery文档,其中包含要在上述XML文档上执行的查询表达式。 目的是获取价格大于30
的那些XML节点<title>
元素。
文件:books.xqy 的内容如下 -
for $x in doc("books.xml")/books/book
where $x/price>30
return $x/title
文件:XQueryTester.java 的内容如下 -
//package com.yiibai.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));
}
}
}
执行上面示例代码(XQueryTester.java),得到以下结果 -
<title lang="en">15天搞定.Net</title>
<title lang="en">3天搞定XQuery</title>
要验证结果,请将books.xqy的内容(在XQuery环境设置一章中给出)替换为上面的XQuery表达式,然后执行XQueryTester.java
程序。
XQuery表达式
下面让我们理解上面XQuery表达式中代码的每一部分,使用函数 -
doc("books.xml")
doc()
是用于定位XML源的XQuery函数。 这里通过指定 - books.xml 。 考虑到相对路径,books.xml 应该位于books.xqy 所在的相同路径中。
使用XPath表达式
doc("books.xml")/books/book
XQuery大量使用XPath表达式来定位要进行搜索的XML所需部分。 在这里,选择了books
节点下的所有<book>
节点。
迭代对象
for $x in doc("books.xml")/books/book
XQuery将xml数据视为对象。 在上面的示例中,$x
表示所选节点,而for
循环遍历节点集合。
应用条件
where $x/price>30
由于$x
代表所选节点,/
用于获取所需元素的值; where
子句用于在搜索结果上添加条件。
返回结果
return $x/title
由于$x
代表所选节点,/
用于获取所需元素 - price
,title
的值; return
子句用于从搜索结果中返回元素。