准备好一个XML文件例如:
<?xml version="1.0" encoding="UTF-8" ?>
<persons>
<person>
<name>lyg</name>
<age>100</age>
</person>
<person>
<name>zx</name>
<age>99</age>
</person>
<person>
<name>ceshi</name>
<age>23</age>
</person>
</persons>
解析代码:
import java.util.ArrayList;
import java.util.List;
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;
/**
*
* @author lyg
*
*/
public class 测试2XML解析 {
public static void main(String[] args) throws Exception {
//SAX解析
//1、获取解析工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
//2、从上一步解析工厂获取解析器
SAXParser parse =factory.newSAXParser();
//3、处理器
//4、加载文档 Document 并注册处理器
Phandler handler = new Phandler();
//5.解析
parse.parse(Thread.currentThread().getContextClassLoader()
.getResourceAsStream("你的xml文件所在.xml"),handler);
//6.获取数据,打印出来
List<Person> persons = handler.getPersons();
for (Person person : persons) {
System.out.println(person.getName() + "--->" + person.getAge());
}
}
}
class Phandler extends DefaultHandler{
private List<Person> persons;//存储person信息
private Person person;
private String tag;//存储操作的标签
public List<Person> getPersons() {
return persons;
}
public Person getPerson() {
return person;
}
public String getTag() {
return tag;
}
@Override
public void startDocument() throws SAXException {
System.out.println("---解析文档开始---");
persons = new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
System.out.println(qName + "解析开始");
if(null != qName) {
tag = qName;
if(tag.equals("person")) {
person = new Person();
}
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String content = new String(ch,start,length).trim();
if(null != tag) {
if(tag.equals("name")) {
person.setName(content);
}else if(tag.equals("age")) {
if(content.length() > 0) {
person.setAge(Integer.valueOf(content));
}
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println(qName + "解析结束");
tag = qName;
if(null != tag) {
if(tag.equals("person")) {
persons.add(person);
}
}
tag = null;
}
@Override
public void endDocument() throws SAXException {
System.out.println("---解析文档结束---");
}
}
//
class Person{
String name;
int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
}
执行结果:
---解析文档开始---
persons解析开始
person解析开始
name解析开始
name解析结束
age解析开始
age解析结束
person解析结束
person解析开始
name解析开始
name解析结束
age解析开始
age解析结束
person解析结束
person解析开始
name解析开始
name解析结束
age解析开始
age解析结束
person解析结束
persons解析结束
---解析文档结束---
lyg--->100
zx--->99
ceshi--->23