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 中有两种比较值的类型。
- 一般比较: =、!=、<、<=、>、>=
- 值比较: eq、ne、lt、le、gt、ge
一般比较和值比较的区别
可以通过一个例子来解释。如果任何 q 属性的值大于 100,则以下表达式返回 true。
$bookstore//book/@q > 100
如果表达式只返回一个 q 属性,并且其值大于 10,则以下表达式返回 true。 如果返回多个 q,则会发生错误:
$bookstore//book/@q gt 100
热门文章
优秀文章