由于使用的Androidstudio,因此首先要在main文件下创建assets文件,如图: 再将xml文件复制进去,此xml可以去城市选择xml 下载; 此处给出一个xml片段参考,由于给此xml的后台并不熟悉xml,因此xml并不规范,仅作参考:
<?xml version="1.0" encoding="utf-8"?> <database name="deshop"> <!-- 表 de_area --> <table name="de_area"> <column name="class_id">1</column> <column name="class_parent_id">0</column> <column name="class_name">中国</column> <column name="class_type">0</column> </table> <table name="de_area"> <column name="class_id">2</column> <column name="class_parent_id">1</column> <column name="class_name">北京</column> <column name="class_type">1</column> </table> <table name="de_area"> <column name="class_id">3</column> <column name="class_parent_id">1</column> <column name="class_name">安徽</column> <column name="class_type">1</column> </table>首先根据xml创建一个城市的实体类city:
public class City { private String class_id; private String class_parent_id; private String class_name; private String class_type; public String getClass_id() { return class_id; } public void setClass_id(String class_id) { this.class_id = class_id; } public String getClass_parent_id() { return class_parent_id; } public void setClass_parent_id(String class_parent_id) { this.class_parent_id = class_parent_id; } public String getClass_name() { return class_name; } public void setClass_name(String class_name) { this.class_name = class_name; } public String getClass_type() { return class_type; } public void setClass_type(String class_type) { this.class_type = class_type; } }此处为pull解析,由于代码介绍,并未将解析方法单独封装:
package com.dxx.xmltest; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.util.Xml; import android.widget.ListView; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; public class MainActivity extends AppCompatActivity { private ListView lv; private List<City> list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); lv = (ListView) findViewById(R.id.lv); InputStream is = null; try { is = this.getAssets().open("de_area.xml"); readXML(is); } catch (Exception e) { e.printStackTrace(); } } public void readXML(InputStream inputstream) throws XmlPullParserException, IOException { XmlPullParser parser = Xml.newPullParser(); parser.setInput(inputstream, "UTF-8"); int eventCode = parser.getEventType(); City city = null; while (eventCode != XmlPullParser.END_DOCUMENT) { switch (eventCode) { case XmlPullParser.START_DOCUMENT: list = new ArrayList<>(); break; case XmlPullParser.START_TAG: if ("table".equals(parser.getName())) { city = new City(); }else if ("column".equals(parser.getName())){ String name = parser.getAttributeValue(0); String value = parser.nextText(); if (name.equals("class_id")){ city.setClass_id(value); }else if (name.equals("class_parent_id")){ city.setClass_parent_id(value); }else if (name.equals("class_name")){ city.setClass_name(value); }else { city.setClass_type(value); } } break; case XmlPullParser.END_TAG: if ("table".equals(parser.getName()) && city!= null) { list.add(city); city =null; } break; default: break; } eventCode = parser.next(); } lv.setAdapter(new MyAdapter(this,list)); Log.i("dxx","list=" + list); } }此处的ListView就是一个简单的为了展示的ListView,就不在给出代码,效果图如下
