zoukankan      html  css  js  c++  java
  • XML解析之SAX解析:如何将XML信息存储到集合中

    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 + "]";
        }
    
    
    }
    
    很多事情即将开始,很多人的命运即将改变
  • 相关阅读:
    2010年8月18日周三_Migrating from 1.3 to 2.0_5
    2010年8月12日_周四_UserControlTask control
    2010年8月18日周三_insideTheAPI_overView_6.1
    一个Flex事件的简单的例子
    2010年8月13日_周五_PrintTask control
    如何发布一个GeometryService服务
    lua分割字符串
    lua字符串合并
    lua 类型转换
    linux 下 svn 冲突解决办法
  • 原文地址:https://www.cnblogs.com/liuzk/p/12458951.html
Copyright © 2011-2022 走看看