Android中XML檔案的序列化產生與解析

來源:互聯網
上載者:User

標籤:lin   空間   super   post   serial   tag   span   direct   java   

首先,我把Person的實體類

package net.loonggg.test;    public class Person {      private int id;      private String age;      private String name;      private String sex;      private String address;        public int getId() {          return id;      }        public void setId(int id) {          this.id = id;      }        public String getAge() {          return age;      }        public void setAge(String age) {          this.age = age;      }        public String getName() {          return name;      }        public void setName(String name) {          this.name = name;      }        public String getSex() {          return sex;      }        public void setSex(String sex) {          this.sex = sex;      }        public String getAddress() {          return address;      }        public void setAddress(String address) {          this.address = address;      }        @Override      public String toString() {          return "Person [id=" + id + ", age=" + age + ", name=" + name                  + ", sex=" + sex + ", address=" + address + "]";      }    }  
其次:產生xml檔案的方法例如以下:

/**      * 產生xml      */      private void createXml() {          XmlSerializer serializer = Xml.newSerializer();// xml檔案產生器          File file = new File(Environment.getExternalStorageDirectory(),                  "person.xml");          FileOutputStream fos = null;          try {              fos = new FileOutputStream(file);              serializer.setOutput(fos, "utf-8");// 為xml產生器設定輸出資料流和字元編碼              serializer.startDocument("utf-8", true);// 開始文檔。參數分別為字元編碼和是否保持獨立              serializer.startTag(null, "persons"); // 開始標籤,參數分別為:命名空間和標籤名              for (Person person : list) {                    serializer.startTag(null, "person");                  serializer.attribute(null, "id", person.getId() + "");                    serializer.startTag(null, "name");// 開始標籤                  serializer.text(person.getName());// 常值內容                  serializer.endTag(null, "name");// 結束標籤                    serializer.startTag(null, "sex");                  serializer.text(person.getSex());                  serializer.endTag(null, "sex");                    serializer.startTag(null, "age");                  serializer.text(person.getAge());                  serializer.endTag(null, "age");                    serializer.startTag(null, "address");                  serializer.text(person.getAddress());                  serializer.endTag(null, "address");                    serializer.endTag(null, "person");                }              serializer.endTag(null, "persons");// 結束標籤              serializer.endDocument();// 結束xml文檔              Toast.makeText(getApplicationContext(), "產生成功。", Toast.LENGTH_SHORT);          } catch (Exception e) {              Toast.makeText(getApplicationContext(), "產生失敗!

", Toast.LENGTH_SHORT); e.printStackTrace(); } finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } }

然後是解析xml檔案的方法:

/**      * 解析xml檔案      */      private List<Person> pullXml() {          try {              File file = new File(Environment.getExternalStorageDirectory(),                      "person.xml");              FileInputStream fis = new FileInputStream(file);              List<Person> persons = null;              Person person = null;              XmlPullParser parser = Xml.newPullParser();// 擷取xml解析器              parser.setInput(fis, "utf-8");// 參數分別為輸入資料流和字元編碼              int type = parser.getEventType();              while (type != XmlPullParser.END_DOCUMENT) {// 假設事件不等於文檔結束事件就繼續迴圈                  switch (type) {                  case XmlPullParser.START_TAG:                      if ("persons".equals(parser.getName())) {                          persons = new ArrayList<Person>();                      } else if ("person".equals(parser.getName())) {                          person = new Person();                          String id = parser.getAttributeValue(0);                          person.setId(Integer.parseInt(id));                      } else if ("name".equals(parser.getName())) {                          person.setName(parser.nextText());                      } else if ("sex".equals(parser.getName())) {                          person.setSex(parser.nextText());                      } else if ("address".equals(parser.getName())) {                          person.setAddress(parser.nextText());                      } else if ("age".equals(parser.getName())) {                          person.setAge(parser.nextText());                      }                      break;                  case XmlPullParser.END_TAG:                      if ("person".equals(parser.getName())) {                          persons.add(person);                          person = null;                      }                      break;                  }                  type = parser.next();// 繼續下一個事件              }              return persons;          } catch (NumberFormatException e) {              e.printStackTrace();          } catch (FileNotFoundException e) {              e.printStackTrace();          } catch (XmlPullParserException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }          return null;      }  
再次是MainActivity裡調用的部分代碼:

public class MainActivity extends Activity {      private Button btn_create = null;      private Button btn_pull = null;      private TextView tv_show;      private List<Person> list = null;        @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          btn_create = (Button) findViewById(R.id.createXml);          btn_pull = (Button) findViewById(R.id.pullXml);          tv_show = (TextView) findViewById(R.id.tvShow);          list = new ArrayList<Person>();          for (int i = 0; i < 5; i++) {              Person person = new Person();              person.setAge(i + 20 + "");              person.setId(i);              person.setName("loonggg" + i);              person.setSex("男");              person.setAddress("中南海" + i + 1 + "大街");              list.add(person);          }          btn_create.setOnClickListener(new View.OnClickListener() {                @Override              public void onClick(View v) {                  createXml();              }          });            btn_pull.setOnClickListener(new View.OnClickListener() {                @Override              public void onClick(View v) {                  tv_show.setText(pullXml().toString());              }          });      }  }  





Android中XML檔案的序列化產生與解析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.