码迷,mamicode.com
首页 > 编程语言 > 详细

java解析XML

时间:2019-03-01 13:01:48      阅读:216      评论:0      收藏:0      [点我收藏+]

标签:注册   就是   util   cte   stat   override   int   odi   ade   

在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());
}

 

java解析XML

标签:注册   就是   util   cte   stat   override   int   odi   ade   

原文地址:https://www.cnblogs.com/powangxu/p/10455487.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!