SAX解析XML

public class SAXTestXml {

    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
        // 獲得解析工廠
        SAXParserFactory factory = SAXParserFactory.newInstance();
        // 從解析工廠獲取解析器
        SAXParser parser = factory.newSAXParser();
        // 編寫處理器 加載文檔 Document 註冊處理器
        PHandler handler = new PHandler();
        // 解析
        parser.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("com/temp/sax_xml/person.xml"), handler);
        
        List<Person> persons = handler.getPersons();
        System.out.println(persons.size());
        for (Person person : persons) {
            System.out.println(person);
        }
    }
}

class PHandler extends DefaultHandler {
    private List<Person> persons;
    private Person person;
    private String elementName;
    
    public List<Person> getPersons(){
        return this.persons;
    }
    @Override
    public void startDocument() throws SAXException {
        persons = new ArrayList<>();
    }

    @Override
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
        if (null!=qName) {
            elementName = qName;
            if ("person".equals(qName)) {
                person=new Person();
                if (null!=attributes) {
                    person.setId(attributes.getValue("id"));
                }
            }
        }
    }

    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        String contents = new String(ch, start, length);
        if (null!=contents&&!contents.isEmpty()) {
            contents = contents.trim();
            if ("name".equals(elementName)) {
                person.setName(contents);
            }else if("age".equals(elementName)) {
                if (contents.length()>0) {
                    person.setAge(Integer.valueOf(contents));
                }
            }
        }
    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        if ("person".equals(qName)) {
            persons.add(person);
        }
        elementName = null;
    }

    @Override
    public void endDocument() throws SAXException {
        
    }
}
class Person{
    private String name;
    private int age;
    private String id;
    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 getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + ", id=" + id + "]";
    }
}

xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
   <person id="2212312313">
    <name>曉明</name>
    <age>100</age>
   </person>
   <person id="8776856786">
    <name>晴雪</name>
    <age>22</age>
   </person>
</persons>


結果

2

Person [name=曉明, age=100, id=2212312313]

Person [name=晴雪, age=22, id=8776856786]



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章