Android开发之xml的解析

本文介绍了XML文件的四种解析方法:DOM、SAX、Pull及JSON。重点讲解了Pull解析的过程和示例代码,并对比了不同解析方法的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家都知道XML是指可扩展标记语言(Extensible Markup Language),它是一种标记语言,很类似HTML.

对于一个xml文件是怎么解析的呢?

简单的介绍一下xml文件的解析

xml文件的解析有以下几种方式

1.dom解析

dom解析xml的优点:

因为分配了一个树形结构,很方便的实现增加、修改、删除的操作。

dom解析xml的缺点:

如果要解析的文件过大,一次性在内存中分配一个树形结构,造成内存的溢出。

2.sax解析

sax解析的方式:边读边解析

当使用sax方式读到特定的标签时候,自动调用相应的方法进行操作。

sax解析xml的优点:不会造成内存的溢出。

sax解析xml的缺点:不能实现增加、修改、删除的操作。

3.pull解析

其实pull解析原理上也是sax解析

重点说一下pull解析

pull解析的步骤:

(1).创建解析器工厂

(2)根据解析器工厂创建解析器

(3)把要操作的文件放到解析器里面

解析stu.xml

<?xml version="1.0" encoding="UTF-8"?>

<students>

<student>

<name>lily</name>

<age>20</age>

</student>

<student>

<name>zhangsan</name>

<age>19</age>

</student>

10 </students>

java代码

public class TestPull {

public static void main(String[] args) throws Exception {

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

XmlPullParser parser = factory.newPullParser();

InputStream in = new FileInputStream("src/stu.xml");

parser.setInput(in, "utf-8");

List<Student> students = null;

Student student = null;

int type = 0;

// 如果当前解析到的标签,不是文档的结束,继续操作

10 while ((type = parser.getEventType()) != XmlPullParser.END_DOCUMENT) {

11 // 得到当前解析的标签的名称

12 String tagName = parser.getName();

13 switch (type) {

14 case XmlPullParser.START_TAG:

15 if ("students".equals(tagName)) {

16 students = new ArrayList<Student>();

17 } else if ("student".equals(tagName)) {

18 student = new Student();

19 } else if ("name".equals(tagName)) {

20 // 得到标签里面的值

21 String name = parser.nextText();

22 student.setName(name);

23 } else if ("age".equals(tagName)) {

24 int age = Integer.parseInt(parser.nextText());

25 student.setAge(age);

26 }

27 break;

28 case XmlPullParser.END_TAG:

29 // 当解析到结束的student时候,把对象放到list集合里面去

30 if ("student".equals(tagName)) {

31 students.add(student);

32 }

33 break;

34 }

35 // 向下执行

36 parser.next();

37 }

38  }

39 }

10行的while循环语句,判断条件为如果当前解析到的标签不是文档结束标签,就继续解析。

12行根据获取到的标签的名称;

24行获取标签里的值。


以上就是pull解析xml文件的步骤以及示例代码;有于pull解析相对而言比较麻烦,所以在日常开发过程中用的不是很频繁

接下来就是第四种解析方式

4.Json解析

JSON(JavaScript Object Notation),JavaScript对象表示法。JSON是一种简单的数据的格式,比xml更加轻巧,是一种轻量级别的数据交互格式。

JSON的规则:

(1) 映射用冒号(”:”)表示。名称:值

(2) 并列的数据之间用逗号(”,”)分隔。名称1:值1,名称2:值2

(3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}

(4) 并列数据的集合(数组)用方括号(“[]”)表示。

(5) 元素值可具有的类型:string, number, object, array, true, false, null。

解析json的方式有很多种,有很多开源的解析框架,例如org.json,json-libgson,我们这里使用org.json进行解析。示例代码如下

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import org.junit.Test;

 

public class JsonTest {

@Test

public void TestJsonParser() throws JSONException{

10 

11 //自己模拟一个json

12 String jsoncontent = "{name:'张三',age:'18'}";

13 

14 String jsonArray = "[{name:'张三',age:'18'},{name:'李四',age:'28'}]";  

15 

16 //json 解析小技巧 :看我们解析的json串 如果最外边是{ } 就用JSONObject  如果是[]  就用JSONArray

17 JSONObject obj = new JSONObject(jsoncontent);

18 String name = obj.getString("name");

19 String age = obj.getString("age");

20 System.out.println("name:"+name+"age::"+age);

21 

22 JSONArray arr = new JSONArray(jsonArray);

23 JSONObject object = (JSONObject) arr.get(1);

24 String name1   = (String) object.get("name");

25 String age1 = object.getString("age");

26 System.out.println("name:"+name1+"age::"+age1);

27 }

28 

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值