public class Person {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = 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;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + id;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (id != other.id)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
public Person(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public Person() {
super();
}
}
sax解析:
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxTest {
public static void main(String[] args) {
try {
//解析器的获取
//1、获取sax解析工厂
SAXParserFactory sf = SAXParserFactory.newInstance();
//2、获取解析器
SAXParser sp = sf.newSAXParser();
//创建xml文件的输入流
InputStream inStream = SaxTest.class.getClassLoader()
.getResourceAsStream("person.xml");
//3、解析xml文件,将事件处理器传入。
sp.parse(inStream, new PersonHandler());
} catch (ParserConfigurationException | SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//事件处理器。
class PersonHandler extends DefaultHandler {
private String currentTag;
private List<Person> persons = null;
private Person person = null;
//读到文档开始时触发的事件
public void startDocument() throws SAXException {
persons = new ArrayList<Person>();
}
//读到文档开始标签时触发的事件
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentTag = qName;
System.out.println(qName);
if ("person".equals(qName)) {
person = new Person();
String id = attributes.getValue("id");
person.setId(Integer.parseInt(id));
}
}
//读到字符数据时触发的事件。
public void characters(char[] ch, int start, int length)
throws SAXException {
// if(currentTag.equals("name")) { 容易抛空指针异常
if ("name".equals(currentTag)) {
person.setName(new String(ch, start, length));
}
if ("age".equals(currentTag)) {
String age = new String(ch, start, length);
person.setAge(Integer.parseInt(age));
}
}
//读到结束标签时触发的事件。
public void endElement(String uri, String localName, String qName)
throws SAXException {
System.out.println(qName);
if ("person".equals(qName)) {
persons.add(person);
person = null;
}
currentTag = null;
}
public void endDocument() throws SAXException {
for (Person p : persons) {
System.out.println(p);
}
}
}