XML文件结构:
<?xml version="1.0" encoding="utf-8"?>
<entitys>
<entity>
<name>张三</name>
<age>30</age>
</entity>
<entity>
<name>李四</name>
<age>40</age>
</entity>
<entitys>
XML的解析方式有很多种,比如:DOM解析、SAX解析、Pull解析等等... 这里采用Pull解析的方式。
package com.qiulong.xmlloadtest;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.content.Context;
import android.util.Xml;
public class XmlLoader {
/**
* 加载XML配置文件
* @param context
* @return
*/
public static ArrayList<User> loadUserEntityFromAsset(Context context){
ArrayList<User> list = null;
User entity = null;
InputStream in = null;
try {
in = context.getAssets().open("text.xml");
XmlPullParser parser = Xml.newPullParser();
parser.setInput(in, "UTF-8");
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
// 判断当前事件是否为文档开始事件
case XmlPullParser.START_DOCUMENT:
list = new ArrayList<User>();
break;
// 判断当前事件是否为标签元素开始事件
case XmlPullParser.START_TAG:
if (parser.getName().equals("entity")) { // 判断开始标签元素是否是book
entity = new User();
} else if (parser.getName().equals("name")) {
entity.setName(parser.nextText());
} else if (parser.getName().equals("age")) {
entity.setAge(parser.nextText());
}
break;
// 判断当前事件是否为标签元素结束事件
case XmlPullParser.END_TAG:
if (parser.getName().equals("entity")) {
list.add(entity);
}
break;
}
// 进入下一个元素并触发相应事件
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
} finally {
colseStream(in);//关闭流
}
return list;
}
/**
* 关闭流
* @param in InputStream
*/
public static void colseStream(InputStream in) {
try {
if (in != null) {
in.close();
}
} catch (Exception e) {
}
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FFFFFF"
android:gravity="center">
<LinearLayout
android:id="@+id/lin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"/>
</LinearLayout>
Activity,初始化控件后,先解析XML文件,得到值,然后循环遍历创建TextView来显示内容。
package com.qiulong.xmlloadtest;
import java.util.List;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.app.Activity;
import android.graphics.Color;
public class MainActivity extends Activity {
private LinearLayout lin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lin = (LinearLayout)this.findViewById(R.id.lin);
List<User> list = XmlLoader.loadUserEntityFromAsset(this);
for (int i = 0; i < list.size(); i++) {
TextView name = new TextView(this);
name.setText(list.get(i).getName());
name.setTextSize(20);
name.setTextColor(Color.RED);
lin.addView(name);
TextView age = new TextView(this);
age.setText(list.get(i).getAge()+"");
age.setTextSize(20);
name.setTextColor(Color.RED);
lin.addView(age);
}
}
}
效果图:
以上内容仅供参考和学习,如有不好的地方欢迎指正和建议,谢谢!