`
deepfuture
  • 浏览: 4375472 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79862
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:69455
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:102784
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:283983
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14910
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:66977
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31807
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45791
社区版块
存档分类
最新评论

lucene-用SAX API进行XML解析并索引

阅读更多

1、对XML进行解析使用XML(SAX)的API定义了一个事件驱动的接口。在这个接口中,当某个分析事件发生时,解析器会调用几个方法中的一个响应,而这些方法是由调用程序提供的。这些触发事件包括文档或文档的开始、结束或解析出错。

2、我们使用Xerces2 Java Parser解析器。

3、

XML文档片段

<?xml version='1.0'encoding='utf-8'?>

<adddress-book>

<contact type="individual">

<name>ZanePasolini</name>

<address>999 W.PrinceSt.</address>

<city>NewYork</city>

<province>NY</province>

<postalcode>10013</postalcode>

<country>USA</country>

<telephone>+1 212 3456789</telephone>

</contact>

</address-book>

4、

public class SAXXMLHandler extends DefaultHandler implementsDocument{

privateStringBuffer elementBuffer=new StringBuffer();

privateHashMap attributeMap;

 

privateDocument doc;

 

publicDocument getDocument(InputStream is) throwsDocumentHandlerException{//启动解析器

SAXParseFactory spf=SAXParserFactory.newInstance();

try{

SAXParserparser=spf.newSAXParser();

parser.parse(is,this);

}

catch (IOException e){

throw new DocumentHandlerException("cannot parse xmldocument",e);
}

catch (ParserConfigurationException e){

throw new DocumentHandlerException("cannot parse xmldocument",e);

}

catch (SAXException e){

throw new DocumentHandlerException("cannot parse xmldocument",e);

}

return doc;

}

publicvoid startDocument(){//解析开始事件触发这个方法

doc=new Document();

}

publicvoid startElement(String uri,String localName,StringqName,Attributes atts)

throws SAXException{//每当解析器找到一个新的XML元素的起始标志,都会调用startElement方法

elementBuffer.setLength();//清空

attributeMap.clear();//清空上一个元素的相关记录

if (atts.getLength()>0){

attributeMap=new HashMap();

for (int i=0;i<atts.getLength();i++){

attributeMap.put(atts.getQName(i),atts.getValue(i));

}

}

}

publicvoid characters (){在处理独立的XML元素过程,characters可能被多次调用到,找到cdata

elementBuffer.append(text,start,length);

}

publicvoid endElement(Strig uri,String localNmae,String qName){

//当XML元素关闭时调用

if(qName.equals("address-book")){

return;

}

else if(qName.equals("contact")){

Iterator iter=attributemap.keySet().iterator();

while (iter.hasNext(){

String attName=(String) iter.next();

String attValue=(String) attributeMap.get(attName);

doc.add(Field.keyword(attName,attvalue));

}

}

else{

doc.add(Field.keyword(qName,elementBuffer.toString()));

}

}

public static void main(Stringargs[])throws Exception{

SAXXMLHandler handler=new SAXXMLHandler();

Document doc=handler.getDocument(new FileInputStream(newFile(args[0])));

System.out.println(doc);

}

}

分享到:
评论

相关推荐

    lucene 对 xml建立索引

    - 使用Lucene提供的API来创建索引。 - 需要创建一个`IndexWriter`对象,指定索引存储的位置及索引的配置选项。 - 对于每个XML文档中的元素,可以创建一个`Document`对象,并将其添加到`IndexWriter`中。 3. **...

    lucene索引非txt文档笔记

    总的来说,要让 Lucene 支持非文本格式的文档搜索,关键在于使用适当的库将这些文档转换为纯文本,然后利用 Lucene 的 API 进行索引。通过这种方式,你可以实现对 Word、PDF、RTF、HTML 和 XML 文件的有效搜索。

    Xerces-J-bin.2.9.1.zip

    Lucene是Apache的一个全文检索库,XML作为数据交换格式,与Lucene的集成往往需要XML解析器的支持,Xerces-J可以作为一个理想的选择,帮助开发者快速地处理XML索引和查询。 综上所述,Xerces-J是Java环境中处理XML...

    lucene对doc.xlsx操作包

    然后,可以编写代码来读取doc.xlsx文件,提取文本,再用Lucene的Analyzer进行分析,最后将分析后的词项添加到索引。 五、示例代码 ```java import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache...

    cms-indexing-xml

    1. **解析XML**:使用合适的API如DOM、SAX或StAX读取XML文件,并将其转换为可操作的数据结构。 2. **提取关键信息**:识别需要索引的元素或属性,这些通常是用户查询时最常使用的部分。 3. **构建索引**:使用数据...

    分词查询XML

    1. **XML解析**:首先,我们需要使用XML解析器(如DOM、SAX或StAX)来读取XML文件,构建一个数据结构,如DOM树,以便于访问和操作XML数据。 2. **文本提取**:从解析后的XML结构中提取出纯文本内容,这可能涉及到...

    Java 84 道面试题及答案.docx

    5. XML 解析:包括 DOM 解析和 SAX 解析两种方式,DOM 解析可以对节点进行增删改查的操作,而 SAX 解析基于事件的解析方式,解析速度比较快。 6. JSON 数据交换格式:轻量级的数据交换格式,使用 {} 实例化一个 ...

    JavaEE学习课程分享精英强化班腾科.doc

    - **XML**: XML语法、解析技术(SAX、DOM、JDOM、Dom4j)、RSS编程。 - **Servlet/JSP**: Tomcat服务器详解、B/S架构分析、Servlet编程、JSP语法、JSTL和EL表达式、Web设计模式。 - **AJAX**: AJAX基础知识、JSON...

    Java 84道面试题和答案.docx

    Java面试题涵盖了许多核心概念,包括JavaScript事件、页面操作、正则表达式、SQL操作、XML解析、JSON处理、数据库索引以及Java类文件结构等。以下是这些知识点的详细解释: 1. **JavaScript事件**: - `onsubmit`...

    大数据分析培训机构学习路线.docx

    - **SAX解析**:事件驱动,逐行解析,节省内存。 - **Pull解析**:拉取式解析,手动控制解析过程,更高效。 4. **Web开发**: - **HTML、CSS、JS**:网页结构、样式和行为的基础。 - **Tomcat服务器**:部署和...

    wikipedia:解析、索引和搜索来自 Wikipedia、DBPedia 和 Freebase 的有用数据

    2. **数据解析**:Java的DOM、SAX和StAX解析器可以用于处理HTML和XML格式的数据,例如解析Wikipedia页面的源码,提取相关信息。 3. **数据索引**:为了快速搜索和访问大量数据,Java开发者通常会构建索引。Lucene是...

    Java面试题及答案-共8道.docx

    7. **XML解析**:Java中解析XML主要有DOM(一次性加载整个文档,适合小文档)和SAX(基于事件的解析,适合大文档)两种方式,还有第三方库如DOM4J和JDOM提供更便捷的API。 8. **SQL优化**:包括规范化表设计、建立...

    阿里面试题

    XML 是一种用于标记数据的标准格式,而 SAX 和 STAX 是两种常用的 XML 解析方式。 #### SAX (Simple API for XML): - **特点**:基于事件驱动模型,适合解析大型文件。 - **应用场景**:适用于只需要读取 XML 文档...

Global site tag (gtag.js) - Google Analytics