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();
    }

}

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

原文地址:https://www.cnblogs.com/rocky-AGE-24/p/5516954.html