加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sax 解析xml

发布时间:2020-12-16 00:32:04 所属栏目:百科 来源:网络整理
导读:sax方式解析xml的优点: 只要有jdk的存在,严格意义上来说是jre,它就可以运行,不依赖任何第三方的jar包。在移动设备上尤为广泛使用。比如Android就使用它来解析xml。当然Android更为推荐的是采用xmlpull来解析xml。这种方式也同样适合javase。我在后期会为
sax方式解析xml的优点:
只要有jdk的存在,严格意义上来说是jre,它就可以运行,不依赖任何第三方的jar包。在移动设备上尤为广泛使用。比如Android就使用它来解析xml。当然Android更为推荐的是采用xmlpull来解析xml。这种方式也同样适合javase。我在后期会为大家准备使用xmlpull解析xml的demo。敬请关注。
xml文件:
<? xmlversion="1.0"encoding="UTF-8" ?>
< root > student id ="1" group ="1" name 张三 </ sex age 18 email zhangsan@163.com birthday 1987-06-08 memo 好学生 student ="2" ="2" 李四 lisi@163.com ="3" ="3" 小王 xiaowang@163.com ="4" ="4" 小张 xiaozhang@163.com ="5" ="5" 小明 xiaoming@163.com
xml对应的Javabean:
package com.parsexml.entity;

public class Student{

private int id;
group;
Stringname;
Stringsex;
age;
Stringemail;
Stringmemo;
Stringbirthday;
getId(){
return id;
}
void setId( id){
this .id = getGroup(){
group;
}
setGroup( group){
.group StringgetName(){
name;
}
setName(Stringname){
.name StringgetSex(){
sex;
}
setSex(Stringsex){
.sex getAge(){
age;
}
setAge( age){
.age StringgetEmail(){
email;
}
setEmail(Stringemail){
.email StringgetMemo(){
memo;
}
setMemo(Stringmemo){
.memo StringgetBirthday(){
birthday;
}
setBirthday(Stringbirthday){
.birthday birthday;
}

}
开始解析:
com.parsexml;

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

javax.xml.parsers.ParserConfigurationException;
javax.xml.parsers.SAXParser;
javax.xml.parsers.SAXParserFactory;

org.xml.sax.Attributes;
org.xml.sax.SAXException;
org.xml.sax.helpers.DefaultHandler;

com.parsexml.entity.Student;

/**
*功能描述:采用sax方式解析XML<br>
*
*
@author sxyx2008
*
*/ SaxParseXml extends DefaultHandler{

// 存放遍历集合 List < Student > list;
构建Student对象 Studentstudent;
用来存放每次遍历后的元素名称(节点名称) StringtagName;


getList(){
list;
}


setList(List list){
.list StudentgetStudent(){
student;
}


setStudent(Studentstudent){
.student StringgetTagName(){
tagName;
}


setTagName(StringtagName){
.tagName 只调用一次初始化list集合 @Override
startDocument() throws SAXException{
list
new ArrayList ();
}


调用多次开始解析 startElement(Stringuri,StringlocalName,StringqName,
Attributesattributes)
SAXException{
if (qName.equals( " )){
student
Student();
获取student节点上的id属性值 student.setId(Integer.parseInt(attributes.getValue( 0 )));
获取student节点上的group属性值 student.setGroup(Integer.parseInt(attributes.getValue( 1 )));
}
qName;
}


调用多次 endElement(Stringuri,StringqName)
)){
.list.add( .student);
}
null ;
}


只调用一次 endDocument() SAXException{
}

characters( char []ch, start,0)">length)
( != ){
Stringdate
String(ch,start,length);
.tagName.equals( .student.setName(date);
}
else .student.setSex(date);
}
.student.setAge(Integer.parseInt(date));
}
.student.setEmail(date);
}
.student.setBirthday(date);
}
.student.setMemo(date);
}
}
}



static main(String[]args){
SAXParserparser
;
try {
构建SAXParser parser SAXParserFactory.newInstance().newSAXParser();
实例化DefaultHandler对象 SaxParseXmlparseXml SaxParseXml();
加载资源文件转化为一个输入流 InputStreamstream SaxParseXml. .getClassLoader().getResourceAsStream( Student.xml );
调用parse()方法 parser.parse(stream,parseXml);
遍历结果 list parseXml.getList();
for (Studentstudent:list){
System.out.println(
id: + student.getId() tgroup: student.getGroup() tname: student.getName() tsex: student.getSex() tage: student.getAge() temail: student.getEmail() tbirthday: student.getBirthday() tmemo: student.getMemo());
}
}
catch (ParserConfigurationExceptione){
e.printStackTrace();
}
(SAXExceptione){
e.printStackTrace();
}
(IOExceptione){
e.printStackTrace();
}
}

}
效果图:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读