展会信息港展会大全

Android创建xml以及一些解析xml的常用方法
来源:互联网   发布日期:2016-01-13 21:57:02   浏览:2644次  

导读:大家好今天我今天给大家讲解一下Android创建xml以及一些解析xml的常用方法。首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom,sax,XmlPullParser等方法,由于sax代码有......

大家好今天我今天给大家讲解一下Android创建xml以及一些解析xml的常用方法。

首先是创建,我们用XmlSerializer这个类来创建一个xml文件,其次是解析xml文件,常用的有dom,sax,XmlPullParser等方法,由于sax代码有点复杂,本节只讲解一下dom与XmlPullParser解析,sax我将会在下一节单独讲解,至于几种解析xml的优缺点我就不再讲述了。

为了方便理解,我做了一个简单的Demo。首先首界面有三个按钮,点击第一个按钮会在sdcard目录下创建一个books.xml文件。另外两个按钮分别是调用dom与XmlPullParser方法解析xml文件,并将结果显示在一个TextView里。大家可以按照我的步骤一步步来:

第一步:新建一个Android工程,命名为XmlDemo

第二步:修改main.xml布局文件,代码如下:

?

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

<?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>

第三步:修改主核心程序XmlDemo.java,代码如下:

?

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

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

166

167

168

169

170

171

172

173

174

175

176

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();

}

}

}

第四步:由于我们在Sd卡上新建了文件,需要增加权限,如下代码(第13行):

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?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>

第五步:运行上述工程,查看效果:

启动首界面:

点击创建XML文件按钮,生成books.xml文件

books.xml内容如下:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>

<books>

<book>

<bookname>Android教程0</bookname>

<bookauthor>Frankie0</bookauthor>

</book>

<book>

<bookname>Android教程1</bookname>

<bookauthor>Frankie1</bookauthor>

</book>

<book>

<bookname>Android教程2</bookname>

<bookauthor>Frankie2</bookauthor>

</book>

</books>

点击DOM解析XML按钮:

点击XmlPullParse解析XML按钮:

赞助本站

人工智能实验室

相关热词: Android 创建xml 解析xml

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港