大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> XML专区 -> 学习使用XML引擎XQEngine

学习使用XML引擎XQEngine

时间: 2021-07-31 作者:daque

迩来我从来在探求xml探求东西,我编写的运用步调须要按期的探求少许相关联的xml文献,我从来的道理是为了看一看文献中能否有与我想要的数据配合的数据,然而有功夫,我也想把找到的那些数据输入出来。一发端,我试用了一下xslt和xpath,想经过把探求的题目变化成运用xslt不妨处置的题目,然而过程一段功夫的考查,我创造,运用xslt并没有真实处置我想要处置的探求题目,由于我想要输入的数据是运用逗点隔绝的数,而xslt不许满意这个诉求,并且xlst也不许供给全文探求功效。而后我想试验一下运用xml查问谈话(xql),来看看能不许处置,以是我提防的着了一下xql的百般本子的实行,很巧,凑巧创造一个叫xqengine的小东西能处置这个题目,以是,在正文中我想引见一下怎样运用xqengine来在你的xml文献中搜罗你想要找的字符串数据。  xqengine不妨在www.fatdog.com网站下找到,它是一个javabean,运用一个sax领会器来索引一个或多个xml文书档案,而后你就不妨在那些文书档案中举行复合式探求了。它所运用的探求谈话是xql的超集,与xpath有一致的语法。  运用xqengine的java类必需实行一个result()本领,实行探求后,引擎将挪用这个本领把探求截止传到result()本领中,不妨运用三种表露数据的方法来输入数据截止。运用吩咐行参数指明你所须要的探求参数,比方说你不妨指明一个文献假设含有stop这个词,就不会被索引;又如你不妨在参数中吩咐引擎忽视那些少于指转子数的词。  底下,我给出了一个运用xqengine的例程,此刻让咱们来领会一下。开始,main()本领范例化一个探求引擎:xmlengine engine = new xmlengine(),而后它从吩咐行中博得文献名、归来截止方法和探求乞求这三个参数,再运用百般摆设本领来树立引擎,接着挪用setsaxparsername()本领来树立sax领会器的全名,由于咱们运用的是xerces领会器,以是要用到 "org.apache.xerces.parsers.saxparser"。而后咱们就须要树立探求参数,再本例中,咱们将不索引数字或任何少于3个字符的词。在你载入到的xqengine的api文书档案傍边会有精细的摆设参数证明,以是在此我就不细说怎样摆设参数了,请大师本人参见关系文书档案。结果,setdocument()本领指定xqengine将要索引或探求的xml文献。固然,即使你想要索引多个文献的话,只需树立几个相映的setdocument()本领就不妨了。  从底下的代码中咱们还不妨看到,xqengine引擎将用三种各别的方法归来探求截止:standard、summary和csv(运用逗点划分的数值)为了大略起见,我为每种归来截止典型设置了一个数字来包办(1,2,3),而后运用相映的参数挪用setlistenertype()本领。我将在反面精细引见每一种归来截止典型。再有个本领printsessionstate()用来输入索引和引擎的消息,然而我没有把它写进例程中,以是上头的步调只会输入探求截止;下一步再挪用addxqlresultlistener()本领,并传播search的一个范例,用来实行xqlresultlistener的接口;而后再把查问字符串动作一个参数来挪用setquery本领,引擎就会发端实行查问工作。比及查问中断后,引擎挪用search类的result()本领,把查问截止传回,在我供给的例程中,result()本领不过大略的把截止输入出来。代码:

import java.io.*;import com.fatdog.textengine.xmlengine;import com.fatdog.textengine.exceptions.*;import com.fatdog.textengine.query.xqlresultlistener; public class search implements xqlresultlistener{public static void main( string[] args ){xmlengine engine = new xmlengine();string searchfile = args[0];string searchtype = args[1];string query = args[2];try { file://摆设引擎engine.setsaxparsername( "org.apache.xerces.parsers.saxparser");engine.setminindexablewordlength( 3 );engine.setdoindexnumbers( false );engine.setdocument( searchfile );if (searchtype.equals("1")) {engine.setlistenertype(xmlengine.standard_listener);}else if (searchtype.equals("2")) {engine.setlistenertype(xmlengine.summary_listener);}else {engine.setlistenertype(xmlengine.csv_listener);}}catch( missingorinvalidsaxparserexception e ){system.out.println( "缺乏或不行用的 sax领会器" ); return;}catch( filenotfoundexception e ) {system.out.println( "不许找到 xml 文献: "); return;}catch( cantparsedocumentexception e ) {system.out.println( "不许领会 xml 文献: "); return;}// engine.printsessionstats();engine.addxqlresultlistener( new search() );try { engine.setquery( query );}catch( invalidqueryexception e ) {system.out.println( "不行用的查问乞求: " + e.getmessage() ); return;}}public void results( string xqlresults ){system.out.println( xqlresults );}}

    好,咱们仍旧把一个运用xqengine的步调编写出来了,那么就让咱们来运转这段代码,在编写翻译这段代码之前,咱们须要载入到xqengine和sax领会器。我是从xml.apache.org左右载到xerces领会器的。我运用的操纵体例是windows 2000 professional,jdk为1.3版,好,搞定那些此后就跟我来树立classpath吧,在"情况变量"中窜改classpath,增添"c:\xql\xqengine.jar;c:\xql\antlr.jar; c:\xerces\xerces.jar"。此刻就不妨编写翻译代码了,然而为了不妨运路途序,咱们还须要一个xml文献,我运用了apache tomcat里的web.xml文献动作演练。前方我也引见过了,咱们运用1,2,3来辨别包办三种归来查问截止方法:  1、运用standard_listener (数字1)和查问项"//welcome-file-list/welcome-file",c:\xql\xql1>java search web.xml 1 "//welcome-file-list/welcome-file" parser.installsaxparser: <org.apache.xerces.parsers.saxparser> installed successfully 1: indexing web.xml query: ( // ( / welcome-file-list welcome-file ) ) 3 hit(s) for file://welcome-file-list/welcome-file <?xml version="1.0"?> <xql:result query="//welcome-file-list/welcome-file" hitcount="3" elemcount="3" doccount="1" xmlns:xql="http://www.fatdog.com/ standard_listener.html"> <welcome-file> index.jsp </welcome-file> <welcome-file> index.html </welcome-file> <welcome-file> index.htm </welcome-file> </xql:result>

  上头的例子中,查问项诉求找就任何"welcome-file-list"元素的一切的"welcome-file"子元素。请提防,探求的截止基础上是从原xml文书档案中节录出来的,不不妨创造探求截止和原文书档案之间的联系。summary_listener(2)归来典型则有些各别,它囊括一个"docid"号和一个"elemlx"号,如许就不妨把截止和原文书档案接洽起来了。  如次是归来截止的示例:  c:\xql\xql1>java search web.xml 2"//welcome-file-list/welcome-file"parser.installsaxparser: <org.apache.xerces.parsers.saxparser>installed successfully1: indexing web.xmlquery: ( // ( / welcome-file-list welcome-file ) )3 hit(s) for file://welcome-file-list/welcome-file<?xml version="1.0"?><xql:resultquery="//welcome-file-list/welcome-file"hitcount="3"elemcount="3"doccount="1"xmlns:xql="http://www.fatdog.com/summary_listener.html"><welcome-file xql:docid="0" xql:elemix="270"/><welcome-file xql:docid="0" xql:elemix="271"/><welcome-file xql:docid="0" xql:elemix="272"/></xql:result>

  我前方也说过,对于我的运用步调来说,最要害的是归来运用逗点隔绝的归来截止,以是csv_listener(3)就很有效了,它不妨归来一个运用运用逗点隔绝的截止,如次:c:\xql\xql1>java search web.xml 3 "//welcome-file-list/welcome-file"parser.installsaxparser:<org.apache.xerces.parsers.saxparser>installed successfully1: indexing web.xmlquery: ( // ( / welcome-file-list welcome-file ) )3 hit(s) for file://welcome-file-list/welcome-file3,3,1,00,270,welcome-file0,271,welcome-file0,272,welcome-file

  固然,xqengine再有很多很宏大的功效,在此我不大概逐一引见,它所附带的文书档案中有充分的源步调和运用本领,你不妨比较着本人进修运用,固然,即使你承诺的话你以至还不妨开拓出一个gui步调,文书档案中就自带了一个鉴于gui的探求步调:swingquerydemo,你不妨看一看接洽接洽。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.