XQuery HTML格式
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()
將被視爲普通文本。