破妄虚

导航

 

在Java中有自带的XML解析器,他是自上而下的,以流的方式进行解析的
例子如下,讲XML转化为实体类

所用到的实体类
public class Person {
String name;
int 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; }
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}

XML文件:
<?xml version="1.0" encoding="UTF-8" ?>
<persons>
<person>
<name>至尊宝</name>
<age>10000</age>
</person>
<person>
<name>白晶晶</name>
<age>500</age>
</person>
</persons>

解析类(干货就是这了): 这里是继承了org.xml.sax.helpers.DefaultHandler;类,重写里面的解析方法
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.util.ArrayList;
import java.util.List;

public class PHander extends DefaultHandler {
List<Person> list;
Person person;
String tag;//存储操作标签
@Override
public void startDocument() throws SAXException {
list=new ArrayList<>();
}

@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 str=new String(ch,start,length).trim();
if (null != tag && str.length() > 0) {
if (tag.equals("name")) {
person.setName(str);
}else if (tag.equals("age")) {
person.setAge(Integer.valueOf(str));
}
}
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if (null != qName && qName.equals("person")){
list.add(person);
}
tag=null;
System.out.println(qName+" +++解析文档结束");
}

@Override
public void endDocument() throws SAXException {
}

public List<Person> getList() {
return list;
}

public void setList(List<Person> list) {
this.list = list;
}
}

用main方法跑着看一下:
public static void main(String[] args) throws Exception {
/**
* SAX解析
*/
//1 获取解析工厂
SAXParserFactory factory=SAXParserFactory.newInstance();
//2从工厂获取解析器
SAXParser parser=factory.newSAXParser();

//3加载文档document注册处理器

//4编写处理器
PHander pHander=new PHander();

//5 解析;了 注意这里加载XML文件的路径他是从线程里面加载的
parser.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("p.xml"),pHander);

//6 打印数据
System.out.println(pHander.getList().toString());
}

 

posted on 2019-03-01 11:42  破妄虚  阅读(117)  评论(0编辑  收藏  举报