文章目录
  1. 1. 说明

说明

XML是一种常用的数据格式,在Android中一般常用DOM,SAX,PULL三种方式解析。以下分别介绍这三种解析方法的使用,个人觉得使用PULL方式较为简单,本篇先介绍DOM方式解析XML数据。

#实例
我们可以在项目自带的assets文件夹中新建一个xml文件保存xml数据以供解析,以下是我在assets文件夹下建的userinfo.xml。

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<root>
<userinfo>
<username>Carlos</username>
<age>21</age>
</userinfo>
<userinfo>
<username>Jack</username>
<age>19</age>
</userinfo>
</root>

Dom解析类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package com.carlos.xml;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class DomParseXml extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

parseXml();

}

List<UserInfo> parseXml(){
List<UserInfo> infos=new ArrayList<UserInfo>();
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();

//获取实例
try {
DocumentBuilder builder=factory.newDocumentBuilder();
//打开,并加载XML文件到输入流
InputStream inputStream=getResources().getAssets().open("userinfo.xml");
//将输入流的数据解析之后放到Document对象中
Document document=builder.parse(inputStream);
//使用getDocumentElement()方法获取根节点
Element root=document.getDocumentElement();
//获取root节点下面的userinfo节点
NodeList nodes=root.getElementsByTagName("userinfo");

for(int i=0;i<nodes.getLength();i++){
//创建Userinfo实例
UserInfo info=new UserInfo();
//获取userinfo元素节点
Node item=nodes.item(i);
NodeList list=item.getChildNodes();
for(int j=0;j<list.getLength();j++){
Node node=list.item(j);
String nodeName=node.getNodeName();
if (nodeName.equals("username")) {
info.setUsername(node.getFirstChild().getNodeValue());
Log.i("userinfo", node.getFirstChild().getNodeValue());

}else if (nodeName.equals("age")) {
info.setAge(node.getFirstChild().getNodeValue());
Log.i("userinfo", node.getFirstChild().getNodeValue());
}
}
infos.add(info);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return infos;
}
}

Logcat日志中打印出的结果

文章目录
  1. 1. 说明