Java Sax 初学
来源:互联网 发布:白金数据电影 编辑:程序博客网 时间:2024/06/16 09:35
1.创建SAXParserFactory 实例。
SAXParserFactory factor = SAXParserFactory.newInstance();
2.通过SAXParserFactory 实例创建解析器实例。
SAXParser parser = factor.newSAXParser();
3.设置文件读入流
InputStream is = Demo1.class.getClassLoader().getResourceAsStream("Student.xml");
4.创建Handler实例
class myHandle extends DefaultHandler{
。。。。。
}
5.调用解析器方法
parser.parse(is,dh);
重点:DefaultHandler 子类方法的重写
概述:
startDocument():只会在文档开始解析的时候被调用,每次解析只会调用一次。
startElement():每次开始解析一个元素,即遇到元素标签开始的时候都会调用。
characters():每次解析到元素标签携带的内容时都会调用,即使该元素标签的内容为空或换行。可以使用new String(ch,off,len)获取内容。
endElement():每次结束解析一个元素,即遇到元素标签结束的时候都会调用。
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.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Demo1 {
public static void main(String[] args) throws Exception, Throwable {
SAXParserFactory factor = SAXParserFactory.newInstance();
SAXParser parser = factor.newSAXParser();
InputStream is = Demo1.class.getClassLoader().getResourceAsStream("Student.xml");
myHandle dh = new myHandle();
parser.parse(is, dh);
List<Student> list = dh.getList();
for (Student student : list) {
System.out.println(student);
}
}
}
class myHandle extends DefaultHandler{
private List<Student> list = null;
Student stu = null;
String currName = null;
@Override
public void startDocument() throws SAXException {
list = new ArrayList<Student>();
}
@Override
public void endDocument() throws SAXException {
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
if("stu".equals(qName)){
stu = new Student();
/*stu.setName(qName);
stu.setAge(Integer.parseInt(qName));
stu.setGender(qName);*/
}
currName = qName;
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if("stu".equals(qName)){
list.add(stu);
stu = null;
}
currName = null;//如果此处不赋空值,在接下来,读完节点,读空白时,会把空白赋值。例如,此时的currName = name;读完name节点,会去读取空白元素,此时重新调用characters方法,进入if("name")分支导致name 空白
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String content = new String(ch,start,length);
if(currName!=null){
if("name".equals(currName)){
stu.setName(content);
}else if("age".equals(currName)){
stu.setAge(Integer.parseInt(content));
}else if("gender".equals(currName)){
stu.setGender(content);
}else if("email".equals(currName)){
stu.setEmail(content);
}
}
}
public List<Student> getList(){
return list;
}
}
SAXParserFactory factor = SAXParserFactory.newInstance();
2.通过SAXParserFactory 实例创建解析器实例。
SAXParser parser = factor.newSAXParser();
3.设置文件读入流
InputStream is = Demo1.class.getClassLoader().getResourceAsStream("Student.xml");
4.创建Handler实例
class myHandle extends DefaultHandler{
。。。。。
}
5.调用解析器方法
parser.parse(is,dh);
重点:DefaultHandler 子类方法的重写
概述:
startDocument():只会在文档开始解析的时候被调用,每次解析只会调用一次。
startElement():每次开始解析一个元素,即遇到元素标签开始的时候都会调用。
characters():每次解析到元素标签携带的内容时都会调用,即使该元素标签的内容为空或换行。可以使用new String(ch,off,len)获取内容。
endElement():每次结束解析一个元素,即遇到元素标签结束的时候都会调用。
endDocument():只会在文档解析结束的时候被调用,每次解析只会调用一次。
代码如下:
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.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Demo1 {
public static void main(String[] args) throws Exception, Throwable {
SAXParserFactory factor = SAXParserFactory.newInstance();
SAXParser parser = factor.newSAXParser();
InputStream is = Demo1.class.getClassLoader().getResourceAsStream("Student.xml");
myHandle dh = new myHandle();
parser.parse(is, dh);
List<Student> list = dh.getList();
for (Student student : list) {
System.out.println(student);
}
}
}
class myHandle extends DefaultHandler{
private List<Student> list = null;
Student stu = null;
String currName = null;
@Override
public void startDocument() throws SAXException {
list = new ArrayList<Student>();
}
@Override
public void endDocument() throws SAXException {
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attr) throws SAXException {
if("stu".equals(qName)){
stu = new Student();
/*stu.setName(qName);
stu.setAge(Integer.parseInt(qName));
stu.setGender(qName);*/
}
currName = qName;
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if("stu".equals(qName)){
list.add(stu);
stu = null;
}
currName = null;//如果此处不赋空值,在接下来,读完节点,读空白时,会把空白赋值。例如,此时的currName = name;读完name节点,会去读取空白元素,此时重新调用characters方法,进入if("name")分支导致name 空白
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String content = new String(ch,start,length);
if(currName!=null){
if("name".equals(currName)){
stu.setName(content);
}else if("age".equals(currName)){
stu.setAge(Integer.parseInt(content));
}else if("gender".equals(currName)){
stu.setGender(content);
}else if("email".equals(currName)){
stu.setEmail(content);
}
}
}
public List<Student> getList(){
return list;
}
}
0 0
- Java Sax 初学
- JAVA SAX
- java SAX
- java sax 解析 xml
- java SAX 解析XML
- Java XML SAX
- Java Sax解析xml
- JAVA SAX解析xml
- java SAX解析XML
- Java Sax解析xml
- Java Sax 解析 xml
- Java Sax解析xml
- Java Sax解析xml
- java SAX解析分析
- Java Sax解析
- java SAX使用范例
- Java Sax解析xml
- java sax 解析 实例
- 安卓导航栏和ListView联动
- HttpUtils和XlistView
- Memcache 与Redis
- C#线程之lock
- 美团Android DEX自动拆包及动态加载简介
- Java Sax 初学
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- java之IO包概述并讲解显示文件信息
- 一、工厂方法Factory Method(创建型)
- 数组模拟约瑟夫问题
- css关于position属性的用法(绝对定位和相对定位的混淆)
- Hadoop单机版环境搭建及第一个示例
- POJ Problem 2251 Dungeon Master 【BFS】
- Android中的Selector的用法