SAX解析XML并封装到对象

Contact .java

package cn.itcast.sax;

/**
 * Created by LiJing on 2017/9/4.
 */
public class Contact {
    private String name;
    private int age;
    private String phone;
    private String email;
    private String qq;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int 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 this.name+this.age+this.phone+this.email+this.qq;
    }
}

contact.XML

<?xml version="1.0" encoding="utf-8"?>
<contactList>
    <contact id="001" group="0611">
        <name>张三</name>
        <age>20</age>
        <phone>134222223333</phone>
        <email>zhangsan@qq.com</email>
        <qq>432221111</qq>
    </contact>
    <contact id="002">
        <name>李四</name>
        <age>20</age>
        <phone>134222225555</phone>
        <email>lisi@qq.com</email>
        <qq>432222222</qq>
    </contact>
</contactList>

Demo1.java

package cn.itcast.sax;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.File;
import java.util.List;

/**
 * Created by LiJing on 2017/9/4.
 */
public class Demo1 {
    public static void main(String[] args) throws Exception{
        //创建sax解析对象
        SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
        //解析
        MyDefaultHandler handler = new MyDefaultHandler();
        parser.parse(new File(".//contact.xml"),handler);
        System.out.println("********************************************");
        List<Contact> list  = handler.getList();
        for(Contact contact:list){
            System.out.println(contact);
        }
    }

}

MyDefaultHandler .java

package cn.itcast.sax;

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

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by LiJing on 2017/9/4.
 */
public class MyDefaultHandler extends DefaultHandler{
    private String flag = "";
    private List<Contact> list = new ArrayList<Contact>();
    private Contact contact;
    public  List getList(){
        return list;
    }
    @Override
    public void startDocument() throws SAXException {
        super.startDocument();

    }
    //输出开始标签
    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if("contact".equals(qName)) {

            contact = new Contact();
        }
        System.out.print("<"+qName);
        if(attributes.getLength()!=0){
            for(int i = 0 ; i<attributes.getLength();i++){//获取当前属性的序列
                //获取属性名
                String name = attributes.getQName(i);
                //获取属性值
                String value =  attributes.getValue(i);
                System.out.print(" " + name + "=\"" + value + "\"");
            }
        }

        System.out.print(">");
        flag = qName;

    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        //结束标签
        System.out.print("</"+qName+">");
        if("contact".equals(qName))
        list.add(contact);
        //置空标志 否则将会再次执行contact的set方法 这时contact的属性会被空格和换行覆盖
        flag = null;
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        //获取文本内容输出
        String context = new String(ch,start,length);

        System.out.print(context);
        if ("name".equals(flag))
            contact.setName(context);
        if ("age".equals(flag))
            contact.setAge(Integer.parseInt(context));
        if ("phone".equals(flag))
            contact.setPhone(context);
        if ("email".equals(flag))
            contact.setEmail(context);
        if ("qq".equals(flag))
            contact.setQq(context);

    }

    @Override
    public void endDocument() throws SAXException {
        super.endDocument();

    }
}
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值