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提供的API来创建索引。 - 需要创建一个`IndexWriter`对象,指定索引存储的位置及索引的配置选项。 - 对于每个XML文档中的元素,可以创建一个`Document`对象,并将其添加到`IndexWriter`中。 3. **...
总的来说,要让 Lucene 支持非文本格式的文档搜索,关键在于使用适当的库将这些文档转换为纯文本,然后利用 Lucene 的 API 进行索引。通过这种方式,你可以实现对 Word、PDF、RTF、HTML 和 XML 文件的有效搜索。
Lucene是Apache的一个全文检索库,XML作为数据交换格式,与Lucene的集成往往需要XML解析器的支持,Xerces-J可以作为一个理想的选择,帮助开发者快速地处理XML索引和查询。 综上所述,Xerces-J是Java环境中处理XML...
然后,可以编写代码来读取doc.xlsx文件,提取文本,再用Lucene的Analyzer进行分析,最后将分析后的词项添加到索引。 五、示例代码 ```java import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache...
1. **解析XML**:使用合适的API如DOM、SAX或StAX读取XML文件,并将其转换为可操作的数据结构。 2. **提取关键信息**:识别需要索引的元素或属性,这些通常是用户查询时最常使用的部分。 3. **构建索引**:使用数据...
1. **XML解析**:首先,我们需要使用XML解析器(如DOM、SAX或StAX)来读取XML文件,构建一个数据结构,如DOM树,以便于访问和操作XML数据。 2. **文本提取**:从解析后的XML结构中提取出纯文本内容,这可能涉及到...
5. XML 解析:包括 DOM 解析和 SAX 解析两种方式,DOM 解析可以对节点进行增删改查的操作,而 SAX 解析基于事件的解析方式,解析速度比较快。 6. JSON 数据交换格式:轻量级的数据交换格式,使用 {} 实例化一个 ...
- **XML**: XML语法、解析技术(SAX、DOM、JDOM、Dom4j)、RSS编程。 - **Servlet/JSP**: Tomcat服务器详解、B/S架构分析、Servlet编程、JSP语法、JSTL和EL表达式、Web设计模式。 - **AJAX**: AJAX基础知识、JSON...
Java面试题涵盖了许多核心概念,包括JavaScript事件、页面操作、正则表达式、SQL操作、XML解析、JSON处理、数据库索引以及Java类文件结构等。以下是这些知识点的详细解释: 1. **JavaScript事件**: - `onsubmit`...
Java API 解析 XML 主要有两种方式:DOM 解析和 SAX 解析。DOM 解析是一次性加载整个文档,生成树形结构,适用于 XML 文档较小的情况;SAX 解析是基于事件的解析方式,解析速度较快,适用于文档大小较大的情况。此外...
- **SAX解析**:事件驱动,逐行解析,节省内存。 - **Pull解析**:拉取式解析,手动控制解析过程,更高效。 4. **Web开发**: - **HTML、CSS、JS**:网页结构、样式和行为的基础。 - **Tomcat服务器**:部署和...
2. **数据解析**:Java的DOM、SAX和StAX解析器可以用于处理HTML和XML格式的数据,例如解析Wikipedia页面的源码,提取相关信息。 3. **数据索引**:为了快速搜索和访问大量数据,Java开发者通常会构建索引。Lucene是...
7. **XML解析**:Java中解析XML主要有DOM(一次性加载整个文档,适合小文档)和SAX(基于事件的解析,适合大文档)两种方式,还有第三方库如DOM4J和JDOM提供更便捷的API。 8. **SQL优化**:包括规范化表设计、建立...