您的位置:首页 > 编程语言 > Java开发

JAVA SAX解析XML文件

2014-07-02 12:40 274 查看
[代码] [Java]代码
view sourceprint?
001
package SAXparse;
002

003

004
import java.io.FileInputStream;
005
import java.lang.reflect.Array;
006
import java.lang.reflect.InvocationTargetException;
007
import java.lang.reflect.Method;
008
import java.text.ParseException;
009
import java.text.SimpleDateFormat;
010
import java.util.ArrayList;
011
import java.util.List;
012

013
import javax.sql.rowset.spi.XmlReader;
014
import javax.xml.parsers.ParserConfigurationException;
015
import javax.xml.parsers.SAXParser;
016
import javax.xml.parsers.SAXParserFactory;
017

018
import org.w3c.dom.Element;
019
import org.xml.sax.Attributes;
020
import org.xml.sax.InputSource;
021
import org.xml.sax.SAXException;
022
import org.xml.sax.XMLReader;
023
import org.xml.sax.helpers.DefaultHandler;
024

025

026

027
public class SaxParse {
028

029
public static void main(String[] args) throws Exception {
030
// TODO Auto-generated method stub
031
SAXParserFactory saxpf = SAXParserFactory.newInstance();
032
SAXParser saxp = saxpf.newSAXParser();
033
XMLReader reader = saxp.getXMLReader();
034
//这里不同于DOM解析式多了一个Handler 创建一个将要解析文件的Handler类继承 DefaultHandler http://www.huiyi8.com/moban/ html模板
035
EmployeeHandler empHander = new EmployeeHandler();
036
reader.setContentHandler(empHander);
037
//set Handler
038
reader.parse(new InputSource(new FileInputStream("file/xml/employeelist.xml")));
039
//开始解析,SAX 开始解析的时候 就会自动调用 EmployeeHandler 中的方法 开始解析调用startDocument(),开始解析一个元素调用startElement()。
040
ArrayList<Employee> empList = empHander.getEmployeeList();
041
for(Employee emp:empList){
042
System.out.println(emp);

class EmployeeHandler extends DefaultHandler{
049
//EmployeeHandler 继承DefaultHandler 然后根据需要选择要重载的 方法
050
// 这里我重载了 startDocument endDocument startElement endElement endElement characters
051
private ArrayList<Employee> employeeList = new ArrayList<Employee>();
052
//创建一个list 来保存解析出来的employee对象
053
@Override
054
public void startDocument() throws SAXException {
055
// TODO Auto-generated method stub
056
System.out.println("begin");
057
//开始解析 打印 begin
058
}
059

060
@Override
061
public void endDocument() throws SAXException {
062
// TODO Auto-generated method stub
063
System.out.println("end");
064
// 结束后打印end
065
}
066

067
private Employee emp =null;
068
private Class cls =null;
069
private String qName=null;
070
public void startElement(String uri, String localName, String qName,
071
Attributes attributes) throws SAXException {
072
// TODO Auto-generated method stub
073
this.qName =qName;
074
//在这里保存一下 元素的名称,在characters()有用到
075
try {
076
cls =Class.forName("SAXparse.Employee");
077
//反射机制
078
Method[] methods =cls.getMethods();
079
if(qName.equals("employee")||qName.equals("salary")){
080
//如果qName=employee 也就是解析到了 employee元素和salary 元素才继续
081
// 因为employee就是要建立的对象,每当解析到一个employee元素就创建一个employee对象
082
// salary 因为有属性所以也单独拿出来
083
if(emp==null){
084
//如果employee对象不存在 就创建
085
emp = (Employee) cls.newInstance();
086
System.out.println("创建一个emp对象");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JAVA