zoukankan      html  css  js  c++  java
  • sax 解析 xml

    SAX(Simple API for XML)

    https://docs.oracle.com/javase/tutorial/jaxp/sax/parsing.html

    persons.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <persons>
        <person id="1">
            <name>张三</name>
            <age>24</age>
        </person>
        <person id="2">
            <name>李四</name>
            <age>25</age>
        </person>
        <person id="3">
            <name>王五</name>
            <age>26</age>
        </person>
    </persons>

    Person实体类

    package com.rocky.tools.xml.domain;
    
    public class PersonOfXml
    {
        private Integer id;
        private String name;
        private Integer age;
    
        public Integer getId()
        {
            return id;
        }
    
        public void setId(Integer id)
        {
            this.id = id;
        }
    
        public String getName()
        {
            return name;
        }
    
        public void setName(String name)
        {
            this.name = name;
        }
    
        public Integer getAge()
        {
            return age;
        }
    
        public void setAge(Integer age)
        {
            this.age = age;
        }
    
        @Override
        public String toString()
        {
            return "PersonOfXml [id=" + id + ", name=" + name + ", age=" + age
                    + "]";
        }
    
    }

    personHandler.java

    package com.rocky.tools.xml.handler;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.xml.sax.Attributes;
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
    
    import com.rocky.tools.xml.domain.PersonOfXml;
    
    public class PersonHandler extends DefaultHandler
    {
        private List<PersonOfXml> list = new ArrayList<PersonOfXml>(1);
        private PersonOfXml person = null;
        private String currentTag = null;
    
        
        public List<PersonOfXml> getList()
        {
            return list;
        }
    
        @Override
        public void startElement(String uri, String localName, String qName,
                Attributes attributes) throws SAXException
        {
            //要取得的标记
           
            if("person".equals(qName))
            {
                person = new PersonOfXml();
                person.setId(Integer.parseInt(attributes.getValue("id")));
            }
            currentTag = qName;
        }
    
        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException
        {
            if("person".equals(qName))
            {
                list.add(person);
                //回收这个对象
                person = null;
            }
            currentTag = null;
        }
    
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException
        {
            /**
             *  <person id="1">
            <name>张三</name>
            <age>24</age>
        </person>
             */
            
            if("name".equals(currentTag))
            {
                person.setName(new String(ch,start,length));
            }
            
            if("age".equals(currentTag))
            {
                person.setAge(Integer.parseInt(new String(ch,start,length)));
            }
        }
    
    }

    main

    package com.rocky.tools.xml.MainAndTest;
    
    import java.io.IOException;
    import java.util.List;
    
    import javax.sql.rowset.spi.XmlReader;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
    
    import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    
    import com.rocky.tools.xml.domain.PersonOfXml;
    import com.rocky.tools.xml.handler.PersonHandler;
    
    public class parseXmlMain
    {
        public void getPersonList()
        {
            //获取工厂类
            SAXParserFactory spf = SAXParserFactory.newInstance();
            SAXParser saxParser = null;
            XMLReader reader = null;
            List<PersonOfXml> list = null;
            try
            {
                saxParser = spf.newSAXParser();
                reader = saxParser.getXMLReader();
                PersonHandler phandler = new PersonHandler();
                list = phandler.getList();
                reader.setContentHandler(phandler);
                reader.parse("src/persons.xml");
                for(PersonOfXml p : list)
                {
                    System.out.println(p);
                }
            } catch (ParserConfigurationException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (SAXException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    test

    package com.rocky.tools.xml.MainAndTest;
    
    import static org.junit.Assert.*;
    
    import org.junit.Test;
    
    public class parseXmlMainTest
    {
         parseXmlMain m = new parseXmlMain();
        @Test
        public void testGetPersonList()
        {
            m.getPersonList();
        }
    
    }

    网上有很多这样的代码,我自己也敲了一边

  • 相关阅读:
    使用Koa搭建一个mock服务器
    d3 使用记录: 树形图
    转载: 矩阵的运算及运算规则
    d3 使用记录: 插值
    d3 使用记录: Selection
    转载: javascript 模块化历程
    Git 常用操作
    贝塞尔曲线_初探
    css 基础-
    Freemarker模板语法
  • 原文地址:https://www.cnblogs.com/rocky-AGE-24/p/5516954.html
Copyright © 2011-2022 走看看