綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[資料] 使用Pull方法生成一個XML,並解析

[複製連結] 查看: 1443|回覆: 0|好評: 1
跳轉到指定樓層
樓主
暗桌之光 | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2011-9-26 13:55

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
1.首先在SD卡上新建一個測試文件夾,用來保存生成的XML
  1. // 獲取保存路徑
  2.     public File getFilePath() {
  3.        File filePath = null;
  4.        //判斷SD卡存在與否
  5.        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
  6.            filePath = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+ "/A_Test/test/");
  7.            if (!filePath.isDirectory()) {//判斷文件存在與否,不存在就創建
  8.               filePath.mkdirs();
  9.            }
  10.        } else {
  11.            Toast.makeText(Main.this, "存儲卡不存在,請插入卡!", 3000).show();
  12.        }
  13.        return filePath;
  14.     }
複製代碼
注意:權限的添加:
  1. <!-- SD卡寫入 -->
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  3. <uses-permission android:name="android.permission.DELETE_CACHE_FILES" />
複製代碼
2.生成一個測試的XML文件
  1. File file = new File(getFilePath() + "/test.xml");
  2. if (!file.exists()) {// 如果文件不存在,就創建新文件
  3.               System.out.println("文件不存在,馬上創建!");
  4.               List<PersonModel> personModel = new ArrayList<PersonModel>();
  5.               personModel.add(new PersonModel(1001, "張三", (short) 30));
  6.               personModel.add(new PersonModel(1002, "李四", (short) 18));
  7.               personModel.add(new PersonModel(1003, "王二", (short) 21));
  8.               CreateXML.createXML(file, personModel);
  9. }
  10. /**
  11. * 生成XML文件
  12. *
  13. * @author lilin
  14. * @date 2011-9-26 上午08:36:08
  15. * @ClassName: CreateXML
  16. * @Description: TODO
  17. */
  18. public class CreateXML {
  19.     // 生成XML文件
  20.     public static void createXML(File file, List<PersonModel> personModel)
  21.            throws IllegalArgumentException, IllegalStateException, IOException {
  22.        FileOutputStream outputStream = null;
  23.        OutputStreamWriter writer = null;
  24.        outputStream = new FileOutputStream(file);
  25.        writer = new OutputStreamWriter(outputStream, "UTF-8");
  26.        BufferedWriter writer2 = new BufferedWriter(writer);// 增加的緩存功能
  27.        XmlSerializer serializer = Xml.newSerializer();
  28.        serializer.setOutput(writer2);
  29.        serializer.setOutput(outputStream, "utf-8");
  30.        serializer.startDocument("utf-8", true);
  31.        serializer.startTag(null, "persons");
  32.        for (PersonModel persons : personModel) {
  33.            serializer.startTag(null, "person");
  34.            serializer.attribute(null, "id", persons.getId().toString());
  35.          
  36.            serializer.startTag(null, "name");
  37.            serializer.text(persons.getName());
  38.            serializer.endTag(null, "name");
  39.          
  40.            serializer.startTag(null, "age");
  41.            serializer.text(persons.getAge().toString());
  42.            serializer.endTag(null, "age");
  43.          
  44.            serializer.endTag(null, "person");
  45.        }
  46.        serializer.endTag(null, "persons");
  47.        serializer.endDocument();
  48.        outputStream.close();
  49.     }
  50. }
複製代碼
3.解析XML
  1. FileInputStream fileInputStream = new FileInputStream(file);
  2.            List<PersonModel> personModel = PullXML.pullXML(fileInputStream);
  3.            for (int i = 0; i < personModel.size(); i++) {
  4.               System.out.println(personModel.get(i).getId() + "--"
  5.                      + personModel.get(i).getName() + "--"
  6.                      + personModel.get(i).getAge());
  7.            }

  8. /**
  9. * 解析XML
  10. *
  11. * @author lilin
  12. * @date 2011-9-26 上午09:23:37
  13. * @ClassName: PullXML
  14. * @Description: TODO
  15. */
  16. public class PullXML {
  17.     public static List<PersonModel> pullXML(InputStream inStream)
  18.            throws Throwable {
  19.        List<PersonModel> persons = null;
  20.        PersonModel person = null;
  21.        /* 聲明XML的pull解析器 */
  22.        XmlPullParser parser = Xml.newPullParser();
  23.        /* 聲明編碼方式 */
  24.        parser.setInput(inStream, "UTF-8");
  25.        int eventType = parser.getEventType();// 產生第一個事件
  26.        while (eventType != XmlPullParser.END_DOCUMENT) {// 只要不是文檔結束事件
  27.            switch (eventType) {
  28.            case XmlPullParser.START_DOCUMENT:// 0 文檔開始事件
  29.               persons = new ArrayList<PersonModel>();
  30.               break;

  31.            case XmlPullParser.START_TAG:// 2 開始元素
  32.               String name = parser.getName();// 獲取解析器當前指向的元素的名稱
  33.               if ("person".equals(name)) {
  34.                   person = new PersonModel();
  35.                   person.setId(new Integer(parser.getAttributeValue(0)));
  36.               }
  37.               if (person != null) {
  38.                   if ("name".equals(name)) {
  39.                      person.setName(parser.nextText());// 獲取解析器當前指向元素的下一個文本節點的值
  40.                   }
  41.                   if ("age".equals(name)) {
  42.                      person.setAge(new Short(parser.nextText()));
  43.                   }
  44.               }
  45.               break;

  46.            case XmlPullParser.END_TAG:
  47.               if ("person".equals(parser.getName())) {
  48.                   persons.add(person);
  49.                   person = null;
  50.               }
  51.               break;
  52.            }
  53.            eventType = parser.next();
  54.        }
  55.        return persons;
  56.     }
  57. }
複製代碼
「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏1 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則