XQuery HTML格式
精华
小牛编辑
184浏览
2023-03-14
XQuery还可以用于将XML文档转换为HTML页面。 看一下下面的例子,了解XQuery是如何做到的。
示例
这个示例中将使用与前面几节中相同的books.xml文件。 以下示例使用books.xml 中的XQuery提取数据并创建一个HTML表,其中包含所有书籍的标题以及价格。
文件: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>
下面给出了要在上面的XML文档上执行的Xquery表达式。文件:books.xqy 的内容如下所示 -
let $books := (doc("books.xml")/books/book)
for $x in $books
let $title := $x/title/text()
let $price := $x/price/text()
order by $title
return <tr><td>{data($title)}</td><td>{$price}</td></tr>
文件: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 代码,得到下结果 -
注:要验证结果,请将books.xqy 的内容(在XQuery开发环境章节中给出)替换为上面的XQuery表达式,然后执行XQueryTester java程序。
XQuery表达式
这里我们使用了以下XQuery表达式 -
data()
函数用于评估title
元素的值,以及{}
运算符告诉XQuery处理器将data()
视为函数。 如果未使用{}
运算符,则data()
将被视为普通文本。