




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
使用XQEngine来搜索XML文件内容 最近我一直在寻找XML搜索工具,我编写的应用程序需要定期的搜索一些有关联的XML文件,我本来的意思是为了看一看文件中是否有与我想要的数据匹配的数据,但是有时候,我也想把找到的这些数据输出出来。一开始,我试用了一下XSLT和XPath,想通过把搜索的问题转化成使用XSLT能够解决的问题,但是经过一段时间的试验,我发现,使用XSLT并没有真正解决我想要处理的搜索问题,因为我想要输出的数据是使用逗号隔开的数,而XSLT不能满足这个要求,而且XLST也不能提供全文搜索功能。然后我想尝试一下使用XML查询语言(XQL),来看看能不能解决,所以我仔细的着了一下XQL的各种版本的实现,很巧,正好发现一个叫XQEngine的小工具能解决这个问题,所以,在本文中我想介绍一下如何使用XQEngine来在你的XML文件中搜寻你想要找的字符串数据。 XQEngine可以在.fatdog.网站下找到,它是一个JavaBean,使用一个SAX解析器来索引一个或多个XML文档,然后你就可以在这些文档中进行复合式搜索了。它所使用的搜索语言是XQL的超集,与XPath有相似的语法。 使用XQEngine的Java类必须实现一个result()方法,完成搜索后,引擎将调用这个方法把搜索结果传到result()方法中,可以使用三种显示数据的格式来输出数据结果。使用命令行参数指明你所需要的搜索参数,比如说你可以指明一个文件假如含有stop这个词,就不会被索引;又如你可以在参数中命令引擎忽略那些少于指定子数的词。 下面,我给出了一个使用XQEngine的例程,现在让我们来分析一下。首先,main()方法实例化一个搜索引擎:XmlEngineengine=newXmlEngine(),然后它从命令行中取得文件名、返回结果格式和搜索请求这三个参数,再使用各种配置方法来设置引擎,接着调用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()方法只是简单的把结果输出出来。 代码: importjava.io.*; import.fatdog.textEngine.XmlEngine; import.fatdog.textEngine.exceptions.*; import.fatdog.textEngine.query.XQLResultListener; publicclassSearchimplementsXQLResultListener publicstaticvoidmain(Stringargs) XmlEngineengine=newXmlEngine(); StringsearchFile=args0; StringsearchType=args1; Stringquery=args2; tryfile:/配置引擎 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); elseif(searchType.equals(2) engine.setListenerType( XmlEngine.SUMMARY_LISTENER); else engine.setListenerType( XmlEngine.CSV_LISTENER); catch(MissingOrInvalidSaxParserExceptione) System.out.println( 缺少或不可用的SAX解析器); return; catch(FileNotFoundExceptione) System.out.println( 不能找到XML文件:); return; catch(CantParseDocumentExceptione) System.out.println( 不能解析XML文件:); return; /engine.printSessionStats(); engine.addXQLResultListener(newSearch(); try engine.setQuery(query); catch(InvalidQueryExceptione) System.out.println( 不可用的查询请求:+e.getMessage(); return; publicvoidresults(StringxqlResults) System.out.println(xqlResults); 好,我们已经把一个使用XQEngine的程序编写出来了,那么就让我们来运行这段代码,在编译这段代码之前,我们需要下载到XQEngine和SAX解析器。我是从xml.apache上下载到Xerces解析器的。我使用的操作系统是Windows2000Professional,JDK为1.3版,好,搞定这些以后就跟我来设置CLASSPATH吧,在环境变量中修改CLASSPATH,添加c:xqlXQEngine.jar;c:xqlantlr.jar;c:xercesxerces.jar。现在就可以编译代码了,不过为了能够运行程序,我们还需要一个XML文件,我使用了ApacheTomcat里的web.xml文件作为演示。前面我也介绍过了,我们使用1,2,3来分别代替三种返回查询结果格式: 1、使用STANDARD_LISTENER(数字1)和查询项/wele-file-list/wele-file,C:xqlxql1javaSearchweb.xml1/wele-file-list/wele-file Parser.installSaxParser: org.apache.xerces.parsers.SAXParser installedsuessfully 1:indexingweb.xml Query:(/(/wele-file-listwele-file) 3hit(s)forfile:/wele-file-list/wele-file ?xmlversion=1.0? xql:result query=/wele-file-list/wele-file hitCount=3 elemCount=3 docCount=1 xmlns:xql=.fatdog./Standard_Listener.html wele-file index.jsp /wele-file wele-file index.html /wele-file wele-file index.htm /wele-file /xql:result 上面的例子中,查询项要求找到任何wele-file-list元素的所有的wele-file子元素。请注意,搜索的结果基本上是从原XML文档中摘录出来的,不能够建立搜索结果和原文档之间的关系。SUMMARY_LISTENER(2)返回类型则有些不同,它包括一个docID号和一个elemlx号,这样就能够把结果和原文档联系起来了。 如下是返回结果的示例: C:xqlxql1javaSearchweb.xml2 /wele-file-list/wele-file Parser.installSaxParser:org.apache.xerces.parsers.SAXParser installedsuessfully 1:indexingweb.xml Query:(/(/wele-file-listwele-file) 3hit(s)forfile:/wele-file-list/wele-file ?xmlversion=1.0? xql:result query=/wele-file-list/wele-file hitCount=3 elemCount=3 docCount=1 xmlns:xql=.fatdog./ Summary_Listener.html wele-filexql:docID=0xql:elemIx=270/ wele-filexql:docID=0xql:elemIx=271/ wele-filexql:docID=0xql:elemIx=272/ /xql:result 我前面也说过,对于我的应用程序来说,最重要的是返回使用逗号隔开的返回结果,所以CSV_LISTENER(3)就很有用了,它能够返回一个使用使用逗号隔开的结果,如下: C:xqlxql1javaSearchweb.xml3 /wele-file-list/wele-file Parser.installSaxParser: org.apache.xerces.parsers.SAXParser installedsuessfully 1:indexingweb.xml Query:(/(/wele-file-listwele-file) 3h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年机器人行业发展趋势与市场机会分析
- 高校辅导员考试关键试题分析及答案
- 2024年辅导员考试的全方位备考策略试题及答案
- 零售药店法规试题及答案
- 脑力题目测试题及答案
- 硬笔书法培训
- 高校招聘辅导员考试模拟题目试题及答案
- 五大领域试讲试题及答案
- 深入探讨农业职业经理人考试中的专业知识体系试题及答案
- 花艺师考试资料分析能力试题及答案
- 2025年上半年安徽淮北市建投控股集团限公司招聘39人易考易错模拟试题(共500题)试卷后附参考答案
- 原料药行业趋势及市场前景分析报告
- Unit1-3短语与句子英语七年级下册
- 高考一轮复习:有机化合物的命名 课件 2025届高考化学一轮复习
- 四年级希望杯历年数学竞赛试题与答案1-13届+奥数分类专项练习集等
- 爱婴医院母乳喂养知识培训
- 低钠盐在高血压防控中的意义
- 2024-2025学年人教版数学八年级下册期中检测卷(含答案)
- 皮炎护理查房
- 博物馆与展览策划作业指导书
- 银行支行装修项目施工组织设计方案
评论
0/150
提交评论