13.2 使用XQuery
XQuery查询非常简单,下面是一个简单的XQuery示例:
程序清单:codes\13\13.2\simple.xq
上面的代码就是一份简单的XQuery文档,①号代码是XQuery注释行,XQuery的注释放在(:和:)之间;②号代码是XQuery的版本声明,它声明了该XQuery文档的版本是1.0;③号代码是XQuery查询体,该查询体不需要任何XML文档,它将直接返回一个字符串。
上面的XQuery文档查询的结果如下:
上面的XQuery查询直接返回了一个字符串,因此无须使用任何XML文档,下面的XQuery查询将示范查询指定XML文档,该XQuery将会查询如下XML文档:
程序清单:codes\13\13.2\booklist.xml
下面定义一份XQuery文档来查询上面的XML文档:
程序清单:codes\13\13.2\first.xq
上面的XQuery中普通内容依然是静态页面代码,只有粗体字代码才是查询XML文档的关键代码,这段查询是一个典型的FLWOR表达式,读者现在看不懂没有太大的关系,后面会有关于FLWOR的详细介绍。
执行上面的查询将返回如下查询结果:
从上面的查询结果可以看出,XQuery非常适合于从XML文档中提取部分数据。
13.2.1 使用XMLSpy查看XQuery结果
如果使用XMLSpy开发XQuery,则可直接在XMLSpy中查看XQuery的查询结果。使用XMLSpy开发XQuery的步骤如下:
(1)单击XMLSpy编辑器File主菜单下的“New…”菜单项,弹出图13.1所示对话框。
图13.1 新建XQuery查询
(2)选择“XML Query Language”列表项用于创建XQuery查询,然后单击“OK”按钮,将弹出图13.2所示对话框。
图13.2 选择创建通用XQuery查询
(3)选择其中第2个单选框“Generic XQuery tansformation”——该选项用于创建通用XQuery查询。选中该单选框后单击“OK”按钮,将进入XQuery查询编辑窗口。
成功编辑XQuery查询后,就可以在XMLSpy中来查看查询结果,步骤如下:
(1)进入XQuery的编辑界面。
(2)单击XMLSpy编辑工具的XSL/XQuery主菜单,然后单击“XQuery Execution”菜单项,或者直接按对应的快捷键(Alt+F10),两种操作的效果完全相同。
(3)XMLSpy弹出图13.3所示对话框。
图13.3 选择源XML文档
(4)如果用户需要为XQuery查询选择新的XML文档,可通过单击“Browse…”按钮来选择新的XML文档;如果不需要为XQuery查询选择新的XML文档,则直接单击“Skip XML”按钮跳过该步骤即可。
提示
如果不希望每次都看到图13.3所示的选择源XML文档的对话框,可勾选其中的“Always skip choosing an XML Source for the XQuery Statement”复选框。
在XMLSpy中执行XQuery查询,将可看到相应的执行结果。
13.2.2 使用Saxon执行XQuery查询
前面8.3节在介绍Saxon时已经指出,Saxon完全支持XSLT 2.0、XQuery 1.0和XPath 2.0等规范。本节将示范使用Saxon-B来查看XQuery结果。
Saxon执行XQuery查询的主类是net.sf.saxon.Query。为了使用Saxon执行XQuery查询,需要将saxon9.jar添加到CLASSPATH环境变量之后,然后执行java net.sf.saxon.Query。运行如下命令:
上面的命令在执行java.exe时通过-cp选项设置了类加载路径为系统CLASSPATH环境变量的值和saxon9.jar,这就将saxon9.jar添加到了系统类加载路径中。执行上面的命令可看到图13.4所示提示信息。
图13.4 运行Saxon查询的提示信息
从图13.4中可以看出,如果在运行net.sf.saxon.Query时没有指定任何选项,程序将会输出该查询类的用法提示。
由上图可知,运行net.sf.saxon.Query时可指定多个选项。其中如下几个选项是常用选项:
-s:指定需要查询的XML文档。
-q:指定执行查询的XQuery文档名。
-qs:直接指定执行查询的XQuery字符串。
-o:指定保存查询结果的文件名。
如下命令用于执行first.xq文件所包含的XQuery查询:
注意
执行上面的查询时中文部分可能会显示乱码,这是因为我们必须设置Saxon输出使用合适字符集。关于如何控制Saxon输出的字符集,请参考本章关于选项声明的内容。