申明:个人学习总结,经供参考,欢迎批评指正与交流
<pre name="code" class="java">/**
*
*/
package com.XXX.saxparserxml;
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import com.XXX.utils.Constant;
/**
* @author
*/
public class ParserXML {
private static SAXParser mParser;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
saxParserXml();
}
/**
* SAX解析XML文件采用事件驱动的方式进行,SAX是逐行扫描文件,
* 遇到符合条件的设定条件后就会触发特定的事件,回调你写好的事件处理程序(Hanlder)
*/
private static void saxParserXml() {
// TODO Auto-generated method stub
try {
//1.获取sax解析器的工厂对象
SAXParserFactory mParserFactory = SAXParserFactory.newInstance();
// 2.通过工厂对象 mParserFactory创建解析器对象mParser
mParser = mParserFactory.newSAXParser();
//3.创建事件处理器对象mHanlder
Hanlder mHanlder = new Hanlder();
//4.利用指定处理器解析指定文件
mParser.parse(Constant.PARSER_XML_DIR + File.separator + "test.xml", mHanlder);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Hanlder类
<pre name="code" class="java">/**
*
*/
package com.XXX.saxparserxml;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import com.XXX.dbclass.DateBaseClass;
/**
* @author
*/
public class Hanlder extends DefaultHandler {
private boolean isTest = false;
public Hanlder() {
// TODO Auto-generated constructor stub
}
public Hanlder(DateBaseClass dbc) {
// TODO Auto-generated constructor stub
}
/**
* 开始节点,根据开始节点名建立相关条件或创建相关对象
* */
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
if ("tests".equals(qName)) {
isTest = true;
} else if ("test".equals(qName)){
System.out.println("parser test start");
}
}
/**
* 结束节点,根据结束节点完成相关动作
* */
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
if ("tests".equals(qName)) {
isTest = false;
}
System.out.println("parser test end");
}
/**
* 节点间的文字信息,可通过stringbuffer收集每一个节点的文字信息,
* 在endElement中清空stringbuffer,收集下一个
* */
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
String content = new String(ch, start, length);
System.out.println("content = " + content);
}
}