常用解析工具
一、JSON解析
1、解析json之net.sf.json
http://blog.youkuaiyun.com/itlwc/article/details/38442667
2、解析json之com.google.gson.Gson
http://blog.youkuaiyun.com/itlwc/article/details/38454867
相关文章:http://blog.youkuaiyun.com/wuseyukui/article/details/13775449
3、解析json之org.codehaus.jackson(性能比上面两个高)
http://blog.youkuaiyun.com/hi_kevin/article/details/36639571
4、解析json之FastJson(阿里巴巴出品,极快的性能,超越任其他的Java Json parser。包括自称最快的JackJson)
http://blog.sina.com.cn/s/blog_7ffb8dd501013qas.html
二、XML解析
1、解析XML之DOM
http://blog.youkuaiyun.com/itlwc/article/details/38531771
2、解析XML之SAX
http://blog.youkuaiyun.com/itlwc/article/details/38531791
3、解析XML之JDOM
http://blog.youkuaiyun.com/itlwc/article/details/38531799
4、解析XML之DOM4J
http://blog.youkuaiyun.com/itlwc/article/details/38531807
Android下的PULL解析
在Android中自带了pull解析的jar包,pull解析和sax解析类似,都是基于事件流的方式,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Xmlpull和 Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中。 但Xmlpull比Sax更简明,而且不需要扫描完整个流。
实例代码:
student.xml:
<?xml version="1.0" encoding="utf-8"?>
<students>
<student id="20110806100">
<name>小明</name>
<age>22</age>
<sex>男</sex>
</student>
<student id="20110806101">
<name>小李</name>
<age>24</age>
<sex>男</sex>
</student>
<student id="20110806102">
<name>小丽</name>
<age>21</age>
<sex>女</sex>
</student>
</students>
Student.java:
package com.example.test;
public class Student {
private String id;
private String name;
private int age;
private String sex;
public String getId() {
return id;
}
public void setId(String 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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
定义一个使用PULL解析XML文件的工具类:ParserByPULL.java:
public class ParserByPULL {
//采用XmlPullParser来解析XML文件
public static List<Student> getStudents(InputStream inStream) throws Throwable
{
List<Student> students = null;
Student mStudent = null;
//========创建XmlPullParser,有两种方式=======
//方式一:使用工厂类XmlPullParserFactory
XmlPullParserFactory pullFactory = XmlPullParserFactory.newInstance();
XmlPullParser parser = pullFactory.newPullParser();
//方式二:使用Android提供的实用工具类android.util.Xml
//XmlPullParser parser = Xml.newPullParser();
//解析文件输入流
parser.setInput(inStream, "UTF-8");
//产生第一个事件
int eventType = parser.getEventType();
//只要不是文档结束事件,就一直循环
while(eventType!=XmlPullParser.END_DOCUMENT)
{
switch (eventType)
{
//触发开始文档事件
case XmlPullParser.START_DOCUMENT:
students = new ArrayList<Student>();
break;
//触发开始元素事件
case XmlPullParser.START_TAG:
//获取解析器当前指向的元素的名称
String name = parser.getName();
if("student".equals(name))
{
//通过解析器获取id的元素值,并设置student的id
mStudent = new Student();
mStudent.setId(parser.getAttributeValue(0));
}
if(mStudent!=null)
{
if("name".equals(name))
{
//获取解析器当前指向元素的下一个文本节点的值
mStudent.setName(parser.nextText());
}
if("age".equals(name))
{
//获取解析器当前指向元素的下一个文本节点的值
mStudent.setAge(new Short(parser.nextText()));
}
if("sex".equals(name))
{
//获取解析器当前指向元素的下一个文本节点的值
mStudent.setSex(parser.nextText());
}
}
break;
//触发结束元素事件
case XmlPullParser.END_TAG:
//
if("student".equals(parser.getName()))
{
students.add(mStudent);
mStudent = null;
}
break;
default:
break;
}
eventType = parser.next();
}
return students;
}
}
使用工具类MainActivity.java:
public class MainActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AssetManager asset = getAssets();
try {
InputStream input = asset.open("student.xml");
List<Student> list = ParserByPULL.getStudents(input);
for (Student stu : list) {
Log.e("StudentInfo","Person ID: " + stu.getId() + ","
+ stu.getName() + ", " + stu.getAge() + ", "
+ stu.getSex());
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}
解析结果: