1 java代码:
public class XmlTest02 {
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//Sax解析:固定套路
//1获取解析工厂
SAXParserFactory factory = SAXParserFactory.newInstance();
//2从解析工厂获取解析器
SAXParser parser = factory.newSAXParser();
//3编写处理器
//4加载文档Document注册处理器
PersonHandler handler = new PersonHandler();
//5解析
parser.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("com/alene/learn/p.xml"),handler);
//6获取数据
List<LPerson> persons = handler.getPersons();
for(LPerson person:persons){
System.out.println(person.getName());
}
}
}
class PersonHandler extends DefaultHandler{
private List<LPerson> persons;
private LPerson person;
private String tag; //存储操作的标签
@Override
public void startDocument() throws SAXException {
persons = new ArrayList<LPerson>();
System.out.println("开始解析xml——————");
}
@Override
public void endDocument() throws SAXException {
System.out.println("——————xml结束解析");
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
System.out.println("<"+ qName +">标签开始解析");
if (null!=qName) {
tag = qName;
if (qName.equals("lperson")) {
person = new LPerson();
}
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
System.out.println("</"+qName+">解析结束");
if (null!=qName) {
if (qName.equals("lperson")) {
persons.add(person);
}
}
tag=null;
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String contents = new String(ch,start,length).trim();
System.out.println(tag +"内容为:"+contents);
if (null!=tag) {
if (tag.equals("name")) {
person.setName(contents);
}
if (tag.equals("age")) {
person.setAge(contents);
}
}
}
public List<LPerson> getPersons() {
return this.persons;
}
}
2输出结果:
开始解析xml——————
<persons>标签开始解析
persons内容为:
<lperson>标签开始解析
lperson内容为:
<name>标签开始解析
name内容为:至尊宝
</name>解析结束
null内容为:
<age>标签开始解析
age内容为:9000
</age>解析结束
null内容为:
</lperson>解析结束
null内容为:
<lperson>标签开始解析
lperson内容为:
<name>标签开始解析
name内容为:白晶晶
</name>解析结束
null内容为:
<age>标签开始解析
age内容为:6000
</age>解析结束
null内容为:
</lperson>解析结束
null内容为:
</persons>解析结束
——————xml结束解析
至尊宝
白晶晶
3 xml文件
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<lperson>
<name>至尊宝</name>
<age>9000</age>
</lperson>
<lperson>
<name>白晶晶</name>
<age>6000</age>
</lperson>
</persons>