01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:orientation=
"vertical"
android:layout_width=
"fill_parent"
android:layout_height=
"fill_parent"
>
<Button
android:id=
"@+id/btn1"
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
android:text=
"创建XML文件"
/>
<Button
android:id=
"@+id/btn2"
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
android:text=
"DOM解析XML"
/>
<Button
android:id=
"@+id/btn3"
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
android:text=
"XmlPullParse解析XML"
/>
<TextView
android:id=
"@+id/result"
android:layout_width=
"fill_parent"
android:layout_height=
"wrap_content"
/>
</LinearLayout>
|
01
02
03
04
05
06
07
08
09
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
|
package
com.tutor.xml;
import
java.io.File;
import
java.io.FileNotFoundException;
import
java.io.FileOutputStream;
import
java.io.IOException;
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.NodeList;
import
org.xml.sax.SAXException;
import
org.xmlpull.v1.XmlPullParser;
import
org.xmlpull.v1.XmlPullParserException;
import
org.xmlpull.v1.XmlPullParserFactory;
import
org.xmlpull.v1.XmlSerializer;
import
android.app.Activity;
import
android.os.Bundle;
import
android.util.Log;
import
android.util.Xml;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.TextView;
import
android.widget.Toast;
public
class
XmlDemo
extends
Activity
implements
OnClickListener {
private
static
final
String BOOKS_PATH =
"/sdcard/books.xml"
;
private
Button mButton1,mButton2,mButton3;
private
TextView mTextView;
@Override
public
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.main);
setupViews();
}
//初始化工作
private
void
setupViews(){
mTextView = (TextView)findViewById(R.id.result);
mButton1 = (Button)findViewById(R.id.btn1);
mButton2 = (Button)findViewById(R.id.btn2);
mButton3 = (Button)findViewById(R.id.btn3);
mButton1.setOnClickListener(
this
);
mButton2.setOnClickListener(
this
);
mButton3.setOnClickListener(
this
);
}
//创建xml文件
private
void
createXmlFile(){
File linceseFile =
new
File(BOOKS_PATH);
try
{
linceseFile.createNewFile();
}
catch
(IOException e) {
Log.e(
"IOException"
,
"exception in createNewFile() method"
);
}
FileOutputStream fileos =
null
;
try
{
fileos =
new
FileOutputStream(linceseFile);
}
catch
(FileNotFoundException e) {
Log.e(
"FileNotFoundException"
,
"can't create FileOutputStream"
);
}
XmlSerializer serializer = Xml.newSerializer();
try
{
serializer.setOutput(fileos,
"UTF-8"
);
serializer.startDocument(
null
,
true
);
serializer.startTag(
null
,
"books"
);
for
(
int
i =
0
; i <
3
; i ++){
serializer.startTag(
null
,
"book"
);
serializer.startTag(
null
,
"bookname"
);
serializer.text(
"Android教程"
+ i);
serializer.endTag(
null
,
"bookname"
);
serializer.startTag(
null
,
"bookauthor"
);
serializer.text(
"Frankie"
+ i);
serializer.endTag(
null
,
"bookauthor"
);
serializer.endTag(
null
,
"book"
);
}
serializer.endTag(
null
,
"books"
);
serializer.endDocument();
serializer.flush();
fileos.close();
}
catch
(Exception e) {
Log.e(
"Exception"
,
"error occurred while creating xml file"
);
}
Toast.makeText(getApplicationContext(),
"创建xml文件成功!"
, Toast.LENGTH_SHORT).show();
}
//dom解析xml文件
private
void
domParseXML(){
File file =
new
File(BOOKS_PATH);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db =
null
;
try
{
db = dbf.newDocumentBuilder();
}
catch
(ParserConfigurationException e) {
e.printStackTrace();
}
Document doc =
null
;
try
{
doc = db.parse(file);
}
catch
(SAXException e) {
e.printStackTrace();
}
catch
(IOException e) {
e.printStackTrace();
}
Element root = doc.getDocumentElement();
NodeList books = root.getElementsByTagName(
"book"
);
String res =
"本结果是通过dom解析:"
+
"/n"
;
for
(
int
i =
0
; i < books.getLength();i++){
Element book = (Element)books.item(i);
Element bookname = (Element)book.getElementsByTagName(
"bookname"
).item(
0
);
Element bookauthor = (Element)book.getElementsByTagName(
"bookauthor"
).item(
0
);
res +=
"书名: "
+ bookname.getFirstChild().getNodeValue() +
" "
+
"作者: "
+ bookauthor.getFirstChild().getNodeValue() +
"/n"
;
}
mTextView.setText(res);
}
//xmlPullParser解析xml文件
private
void
xmlPullParseXML(){
String res =
"本结果是通过XmlPullParse解析:"
+
"/n"
;
try
{
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(Thread.currentThread().getContextClassLoader()
.getResourceAsStream(BOOKS_PATH),
"UTF-8"
);
int
eventType = xmlPullParser.getEventType();
try
{
while
(eventType != XmlPullParser.END_DOCUMENT) {
String nodeName = xmlPullParser.getName();
switch
(eventType) {
case
XmlPullParser.START_TAG:
if
(
"bookname"
.equals(nodeName)){
res +=
"书名: "
+ xmlPullParser.nextText() +
" "
;
}
else
if
(
"bookauthor"
.equals(nodeName)){
res +=
"作者: "
+ xmlPullParser.nextText() +
"/n"
;
}
break
;
default
:
break
;
}
eventType = xmlPullParser.next();
}
}
catch
(IOException e) {
e.printStackTrace();
}
}
catch
(XmlPullParserException e) {
e.printStackTrace();
}
mTextView.setText(res);
}
//按钮事件响应
public
void
onClick(View v) {
if
(v == mButton1){
createXmlFile();
}
else
if
(v == mButton2){
domParseXML();
}
else
if
(v == mButton3){
xmlPullParseXML();
}
}
}
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
|
<?xml version=
"1.0"
encoding=
"utf-8"
?>
<manifest xmlns:android=
"http://schemas.android.com/apk/res/android"
package
=
"com.tutor.xml"
android:versionCode=
"1"
android:versionName=
"1.0"
>
<application android:icon=
"@drawable/icon"
android:label=
"@string/app_name"
>
<activity android:name=
".XmlDemo"
android:label=
"@string/app_name"
>
<intent-filter>
<action android:name=
"android.intent.action.MAIN"
/>
<category android:name=
"android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion=
"7"
/>
<uses-permission android:name=
"android.permission.WRITE_EXTERNAL_STORAGE"
/>
</manifest>
3.sax
SAX(simpleAPIforXML)是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一边扫描一边解析.而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂.
2、创建Mp3Info.java实体bean类 java代码: 3、创建Mp3ListContentHandler.java类,继承DefaultHandler类 java代码: 4、创建TestSAXActivity.java类 java代码: |