您的位置:首页 > 其它

SAX解析

2016-06-27 11:44 211 查看
SAX解析是按照xml文件的顺序一步一步的来解析,人为的不可以控制进度,自动调用方法。

package com.example.parse;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import org.xml.sax.helpers.DefaultHandler;

import com.example.bean.Books;

public class SAXParse implements IParse {

public List<Books> l;

@Override
public List<Books> parse(InputStream is) {
l = new ArrayList<Books>();
try {
//得到工厂对象
SAXParserFactory factory = SAXParserFactory.newInstance();
//得到解析器对象
SAXParser parser = factory.newSAXParser();
//从解析器中获得reader
XMLReader xmlReader = parser.getXMLReader();
SAXHandler handler = new SAXHandler();
//得到内容管理者
xmlReader.setContentHandler(handler);
//开始解析
xmlReader.parse(new InputSource(is));
//将解析到的对象返回
return handler.getList();
} catch (Exception e) {
e.printStackTrace();
}
return l;
}

static class SAXHandler extends DefaultHandler {

private List<Books> l;
private Books books;
private String value;
//文档开始
@Override
public void startDocument() throws SAXException {
// 开始解析时创建集合book
l = new ArrayList<Books>();
}
//结束文档
@Override
public void endDocument() throws SAXException {
}
//开始标签
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// 如果开始是book节点
if ("book".equalsIgnoreCase(qName)) {
// 创建book 对象
books = new Books();

}
}
//结束标签
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// 每个节点下的值添加到集合中
if ("name".equalsIgnoreCase(qName)) {
books.setName(value);
} else if ("author".equalsIgnoreCase(qName)) {
books.setAuthor(value);
} else if ("price".equalsIgnoreCase(qName)) {
books.setPrice(value);
} else if ("book".equalsIgnoreCase(qName)) {
l.add(books);
}
}

@Override
public void characters(char[] ch, int start, int length) throws SAXException {
// 获得每个属性节点下的值
value = new String(ch, start, length);
System.out.println(value);
}

public List<Books> getList() {
return l;
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml