文章目录

以下是用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>

SAX解析类

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package com.carlos.xml;

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

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

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

public class SaxParseXml extends Activity{

private static final String TAG="SaxParseXml";

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

void parseXml(){
try {
InputStream inputStream=getResources().getAssets().open("userinfo.xml");

//实例化一个SAXParseFactory对象
SAXParserFactory factory=SAXParserFactory.newInstance();
//创建解析器
SAXParser parser=factory.newSAXParser();
SaxPraseHelper helper=new SaxPraseHelper();
parser.parse(inputStream, helper);
inputStream.close();

} catch (IOException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
}

}

class SaxPraseHelper extends DefaultHandler{

List<UserInfo> infos;
UserInfo info;
String tagName;

//文档开始
@Override
public void startDocument() throws SAXException {
Log.i(TAG, "startDocument");
infos=new ArrayList<UserInfo>();
}

//元素开始
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
Log.i(TAG, "startElement");
tagName=localName;
if (tagName.equals("userinfo")) {
info=new UserInfo();
}
}

//接收字符
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
Log.i(TAG, "characters");
if (tagName!=null) {
String data=new String(ch,start,length);
if (tagName.equals("username")) {
info.setUsername(data);
}else if (tagName.equals("age")) {
info.setAge(data);
}
}

}

//元素结束
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
Log.i(TAG, "endElement");
if (localName.equals("userinfo")) {
infos.add(info);
}
tagName=null;
}

//文档结束
@Override
public void endDocument() throws SAXException {
Log.i(TAG, "endDocument");
//用Logcat日志打印出解析XML数据得到的结果
for(int i=0;i<infos.size();i++){
info=infos.get(i);
Log.i(TAG, info.getUsername());
Log.i(TAG,info.getAge());
}
}
}
}

Logcat日志中打印出的结果

文章目录