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(); } }
网上有很多这样的代码,我自己也敲了一边