XQJ,也即XQuery API for Java。XQJ就是用Java实现的一个包,其中包含了很多接口和类,使用XQJ可以查询单独的XML文档或XML文档集合。这么说可能大家有点晕,打个比方,XQJ对于XQuery就像JDBC Java API对于SQL,XQJ提供了XQuery的Java实现,使我们多了一个操作XML文档的方式。
现在实现XQJ的主要有两个框架,Qexo和Saxon,对与Qexo不甚了解。而Saxon可以同时在Java和。net中使用。
Saxon可以到http://saxon.sourceforge.net/ 下载。
使用Saxon操作XML文档的简单例子:
public class XQuery { public static void main(String[] args) { String content = ""; XQItem xqItem = null; XQDataSource ds = new SaxonXQDataSource(); try { XQConnection conn = ds.getConnection(); XQPreparedExpression exp = conn .prepareExpression("for $x in doc(/"book.xml/")/bookstore/book where $x/price>30 return $x/title"); XQResultSequence result = exp.executeQuery(); while (result.next()) { xqItem = result.getItem(); content +=xqItem.getItemAsString(null); } System.out.println(content); } catch (XQException e) { // TODO: handle exception e.printStackTrace(); } }
这个例子很简单,通过一个简单的查询语句查询XML文档,并以String形式输出,使用Saxon,首先需要创建源XQDataSource,
然后获得连接执行查询操作。对于提取查询的结果数据,有多种方法,上面例子中的就是一种,我们还可以通过熟悉的SAX
方式操作。
public static void formatOutput(XMLStreamReader reader) throws XMLStreamException{ for(int event = reader.next();event != XMLStreamConstants.END_DOCUMENT;event = reader.next()){ switch(event){ case XMLStreamConstants.START_DOCUMENT: System.out.println("start..."); //添加处理代码 break; case XMLStreamConstants.END_ELEMENT: System.out.println("end..."); break; //...可以继续添加想要监听事件 } } }
实现类似上面的函数,然后将前面例子的提取查询结果部分改为:
reader=result.getItemAsStream();
formatOutput(reader);
这样即可。