当前位置: 首页 > 教程 > XQuery >

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()将被视为普通文本。