实现功能:使用SAX读取contact.xml文件,并将读取到的信息封装到对象中,然后输出;
XML文件:contact.xml
<?xml version="1.0" encoding="utf-8"?>
<contactList>
<contact id="001" name="eric">
<name>张三</name>
<age>20</age>
<phone>134222223333</phone>
<email>zhangsan@qq.com</email>
<qq>432221111</qq>
</contact>
<contact id="002" name="jacky">
<name>eric</name>
<age>20</age>
<phone>134222225555</phone>
<email>lisi@qq.com</email>
<qq>432222222</qq>
</contact>
</contactList>
对象类:Contact.java
package SAX;
public class Contact {
public String id;
public String name;
public String age;
public String phone;
public String email;
public String qq;
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 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 getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq;
}
@Override
public String toString() {
return "Contact [age=" + age + ", email=" + email + ", id=" + id
+ ", name=" + name + ", phone=" + phone + ", qq=" + qq + "]";
}
}
SAX的处理程序:MyDefaultHandler3.java
package 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;
/*
* SAX的处理程序
*/
public class MyDefaultHandler3 extends DefaultHandler {
//存储所有的联系人的对象
private List<Contact> list = new ArrayList<Contact>();
public List<Contact> getList() {
return list;
}
//保存一个联系人信息
private Contact contact;
//用于临时存储当前读到的标签名
private String curTag;
/*
*思路:
* 1)创建Contact对象
* 2) 把每个contact标签内容存入到Contact对象
* 3)把Contact对象放到List中
*/
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
curTag = qName;
//读取到contact的开始标签创建Contact对象
if("contact".equals(qName)) {
contact = new Contact();
//设置id值
contact.setId(attributes.getValue("id"));
}
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//当前文本内容
String content = new String(ch,start,length);
if("name".equals(curTag)) {
contact.setName(content);
}
if("age".equals(curTag)) {
contact.setAge(content);
}
if("phone".equals(curTag)) {
contact.setPhone(content);
}
if("email".equals(curTag)) {
contact.setEmail(content);
}
if("qq".equals(curTag)) {
contact.setQq(content);
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
//设置空是为了避免空格和换行设置到对象时属性中
curTag = null;
//读到contact的结束标签放入List中
if("contact".equals(qName)) {
list.add(contact);
}
}
}
主程序:Demo_sax2.java
package SAX;
import java.io.File;
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 Demo_sax2 {
public static void main(String[] args) throws Exception {
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
MyDefaultHandler3 handler = new MyDefaultHandler3();
parser.parse(new File("./src/contact.xml"), handler);
List<Contact> list = handler.getList();
for(Contact contact : list) {
System.out.println(contact);
}
}
}