xml源文件
<?xml version="1.0" encoding="utf-8"?>
<contact-list>
<contact id="001" hobby="eat">
<name>张三</name>
<gender>男</gender>
<age>22</age>
<phone>17728394033</phone>
<email>1014420122@qq.com</email>
<address>130号</address>
</contact>
<contact id="002" hobby="drink">
<name>李四</name>
<gender>女</gender>
<age>23</age>
<phone>13721102938</phone>
<email>2971821987@qq.com</email>
<address>131号</address>
</contact>
SAX解析的主程序
package hf.firstclass.b_SAX;
import java.io.File;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
/**
* 要想看懂这部分,先要看我的上一篇文章
* @author LZK
*
*/
public class TestSAX2 {
public static void main(String[] args) throws Exception {
//创建SAX解析器
SAXParser parser=SAXParserFactory.newInstance().newSAXParser();
//创建一个处理器(自己创建)
MyDefaultHandler3 handler= new MyDefaultHandler3();
//解析XML文件
parser.parse(new File("./src/contact.xml"), handler);
//获取处理器提供的方法,获取集合信息
List<Contact> list=handler.getContactList();
for(Contact con:list){
System.out.println(con);
}
}
}
SAX处理器(关键步骤)
package hf.firstclass.b_SAX;
import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* 思路:
* 1,建立一个集合
* 2,创建一个对象(弄清对象创建的时机)
* 3,设置对象信息(关键一步,也是比较难理解的,如何关联标签与标签的文本)
* 4,将对象放入到集合中(弄清存放到集合的时机)
* @author Administrator
*
*/
public class MyDefaultHandler3 extends DefaultHandler{
//定义一个集合,用于存储联系人对象
private List<Contact> conList= new ArrayList<Contact>();
private Contact con;
/*
* 定义一个变量用于记录标签的名字
* 以便关联标签与标签的文本内容
*/
private String Tag;
@Override
public void startElement(String uri, String localName,
String qName, Attributes attributes) throws SAXException {
Tag=qName;
if("contact".equals(qName)){
con = new Contact();
String idValue=attributes.getValue("id");
con.setId(idValue);
}
}
@Override
public void endElement(String uri,
String localName, String qName) throws SAXException {
//结束时 ,将标记置为空,防止给Contact内的值重复赋值。
Tag=null;
//当读到contact结束标签时,说明一个联系人读完了,存到集合中
if("contact".equals(qName)){
conList.add(con);
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//获取文本内容
String content=new String(ch,start,length);
if("name".equals(Tag)){
con.setName(content);
}else if("gender".equals(Tag)){
con.setGender(content);
}else if("age".equals(Tag)){
con.setAge(content);
}else if("phone".equals(Tag)){
con.setPhone(content);
}else if("email".equals(Tag)){
con.setEmail(content);
}else if("address".equals(Tag)){
con.setAddress(content);
}
}
public List<Contact> getContactList(){
return conList;
}
}
设计联系人的类
package hf.firstclass.b_SAX;
/**
* 定义一个联系人的类
* 用于存储联系人全部信息
* @author Administrator
*
*/
public class Contact {
private String id;
private String name;
private String gender;
private String age;
private String phone;
private String email;
private String address;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Contact [id=" + id + ", name=" + name + ", gender=" + gender + ", age=" + age + ", phone=" + phone
+ ", email=" + email + ", address=" + address + "]";
}
}