XQuery 语法规则

XQuery 语法规则

XQuery 元素、属性和变量必须是有效的 XML 名称并区分大小写。

XQuery 语法规则

  • XQuery 区分大小写。
  • XQuery 元素、属性和变量必须是有效的 XML 名称。
  • XQuery 字符串值可以在单引号或双引号中。
  • XQuery 变量是用 $ 后跟名称定义的,例如:. $bookstore
  • XQuery 注释由 (: 和 :) 分隔,例如 (: XQuery Comment :)

 XQuery 语法规则的示例

让我们以一个包含以下数据的 XML 文件“books.xml”为例:

<bookstore>
    <book category="Romantic">
        <title lang="en">If she loves me</title>
        <author>Ajeet Kumar</author>
        <year>2014</year>
        <price>150</price>
    </book>
    <book category="children">
        <title lang="en">Harry Potter</title>
        <author>J K. Rowling</author>
        <year>2005</year>
        <price>700</price>
    </book>
    <book category="programming">
        <title lang="en">Let's C</title>
        <author>Yashwant Kanetkar</author>
        <year>2003</year>
        <price>200</price>
    </book>
</bookstore>

XQuery 条件表达式

XQuery 中允许使用“If-Then-Else”条件语句。

books.xqy:

for $x in doc("books.xml")/bookstore/book  
return if ($x/@category="CHILDREN")  
then <child>{data($x/title)}</child>  
else <adult>{data($x/title)}</adult>

创建一个基于Java 的XQuery 执行器程序来读取books.xqy,将其传递给XQuery 表达式处理器,并执行该表达式。

package com.yiidian;

import com.saxonica.xqj.SaxonXQDataSource;

import javax.xml.xquery.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

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));  
      }  
   }      
}  

输出结果为:

XQuery 比较

在 XQuery 中有两种比较值的类型。

  1. 一般比较: =、!=、<、<=、>、>=
  2. 值比较: eq、ne、lt、le、gt、ge

一般比较和值比较的区别

可以通过一个例子来解释。如果任何 q 属性的值大于 100,则以下表达式返回 true。 

$bookstore//book/@q > 100  

如果表达式只返回一个 q 属性,并且其值大于 10,则以下表达式返回 true。 如果返回多个 q,则会发生错误:

$bookstore//book/@q gt 100  

 

热门文章

优秀文章