SAX解析XML实例

SAX解析xml简单示例:
解析students.xml,打印解析结果。
1、students.xml:

<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="1" enable="true">
<name>刘亦菲</name>
<sex>女</sex>
<age>26</age>
<email>lyf@163.com</email>
</student>
<student id="2" enable="false">
<name>张伟</name>
<sex>男</sex>
<age>26</age>
<email>zhanglangdang@126.com</email>
</student>
<student id="3" enable="true">
<name>朱小明</name>
<sex>女</sex>
<age>26</age>
<email>zxm@sohu.com.cn</email>
</student>
</students>

2、SAXParserProcessor: XML解析器,用于解析XML

package com.mzh.parsexml;

import java.util.List;
import java.util.ArrayList;

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

public class ParseXmlProcessor extends DefaultHandler{

private Student stu;//目标实例
private List<Student> stuList;//目标实例集合
private String currTag;//当前解析的标签名
/*开始解析xml*/
public void startDocument() throws SAXException{
stuList = new ArrayList();
System.out.println("XML文档解析开始...");
}
/*结束解析XML*/
public void endDocument() throws SAXException{
System.out.println("XML文档解析完毕。");
}
public void startElement(String uri,String localName,String qName,Attributes attributes)
throws SAXException{
currTag=qName;
//如果开始解析<student>标签,则新建一个student实例:
if("student".equals(qName)){
stu = new Student();
}
}
public void endElement(String uri,String localName,String qName) throws SAXException{
//如果<student>标签解析完毕,则把解析出的student实例添加到student集合中:
if("student".equals(qName)){
stuList.add(stu);
stu=null;
}
currTag=null;//每解析完一个标签,必须清空currTag
}
/*解析标签值*/
public void characters(char[] chr,int start,int length) throws SAXException{
String value=new String(chr,start,length);
if(currTag!=null){
if("name".equals(currTag)){
stu.setName(value);
}else if("age".equals(currTag)){
stu.setAge(Integer.parseInt(value));
}else if("sex".equals(currTag)){
stu.setSex(value);
}else if("email".equals(currTag)){
stu.setEmail(value);
}
}
}
/*返回解析结果集合*/
public List<Student> getStudents(){
return stuList;
}
}

3、Student:目标实体

package com.mzh.parsexml;

import java.io.Serializable;

public class Student implements Serializable{
private static final long serialVersionUID = -9151482311773013799L;
private String name;
private String sex;
private int age;
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}


4、TestParseXml:测试XML解析器

package com.mzh.parsexml;

import java.io.File;
import java.io.IOException;
import java.util.List;

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

import org.xml.sax.SAXException;

public class TestParseXml {
/*测试parseXml*/
public static void main(String[] args) {
String fileName="d:\\students.xml";
//sax解析器工厂:
SAXParserFactory parserFactory = SAXParserFactory.newInstance();
ParseXmlProcessor parseXmlProcessor = new ParseXmlProcessor();
try {
//从sax解析器工厂中获取一个sax解析器:
SAXParser parser=parserFactory.newSAXParser();
//执行XML解析:
parser.parse(new File(fileName),parseXmlProcessor);
//输出XML解析结果:
List<Student> students = parseXmlProcessor.getStudents();
System.out.println("解析结果:"+students.size()+"个学生:");
for(Student stud:students){
System.out.println("name:"+stud.getName()+" " +
"age:"+stud.getAge()+" " +
"sex:"+stud.getSex()+" " +
"email:"+stud.getEmail());
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}

}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值