xml解析在企业中用到的并不多,但是我们不妨可以来认识一下
1、布局,只有一个ListView
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
2、MainActivity,这里我也是为了省事就把适配器写在本界面了,看着非常不明了,不建议向我学习
package com.wjh.activity;
public class MainActivity extends Activity {
private XmlPullParser parser;
private List<Student> list;
private Student student;
@SuppressWarnings("resource")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化数据
initDatas();
// 找控件
ListView listView = (ListView) findViewById(R.id.listView);
// 设置适配器
listView.setAdapter(new MyAdapter());
}
// 适配器
class MyAdapter extends BaseAdapter {
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
// 判断
if (convertView == null) {
// 加载视图
convertView = View.inflate(MainActivity.this, R.layout.l_item,
null);
// 创建ViewHolder
holder = new ViewHolder();
// 找控件
holder.name = (TextView) convertView.findViewById(R.id.name_l);
holder.sex = (TextView) convertView.findViewById(R.id.sex_l);
// 设置标签
convertView.setTag(holder);
} else {
// 获取标签
holder = (ViewHolder) convertView.getTag();
}
// 设置内容
Student student2 = list.get(position);
holder.name.setText(student2.getName());
holder.sex.setText(student2.getSex());
return convertView;
}
// 创建内部类
class ViewHolder {
TextView name, sex;
}
}
private void initDatas() {
try {
// 获取assets下的文件
InputStream inputStream = getAssets().open("wjh.xml");
// 获取sd卡中的文件
/*
* File file = new
* File(Environment.getExternalStorageDirectory(),"xxx.xml");
* FileInputStream inputStream = new FileInputStream(file);
*/
// 获取Pull工厂
try {
XmlPullParserFactory factory = XmlPullParserFactory
.newInstance();
// 获取解析器
parser = factory.newPullParser();
// 向解析器设置输入流和编码格式
parser.setInput(inputStream, "UTF-8");
// 获取事件类型
int eventType = parser.getEventType();
// 循环的条件eventType不等于结束文档
while (eventType != parser.END_DOCUMENT) {
// 获取节点name
String parserName = parser.getName();
switch (eventType) {
// 开始文档
case XmlPullParser.START_DOCUMENT:
// 创建存储集合
list = new ArrayList<Student>();
break;
// 开始节点
case XmlPullParser.START_TAG:
// 自己创建一个判断节点的方法
parserStartTag(parser, parserName);
break;
// 结束节点
case XmlPullParser.END_TAG:
// 判断是否是最后一个节点
if (parserName.equals("student")) {
list.add(student);
}
break;
}
// 继续下次循环
eventType = parser.next();
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
// 创建的判断节点的方法
private void parserStartTag(XmlPullParser parser, String parserName) {
if (parserName.equals("student")) {
// 声明并实例化对象
student = new Student();
// 节点的第一个子节点
student.setId(parser.getAttributeValue(0));
} else if (parserName.equals("name")) {
try {
student.setName(parser.nextText());
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if (parserName.equals("sex")) {
try {
student.setSex(parser.nextText());
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}