android XML序列化与反序列化

本文详细探讨了在Android开发中如何进行XML的序列化和反序列化操作,包括使用DOM、SAX和Pull解析器等方法,帮助开发者更有效地处理XML数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

so easy! so .....

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            permissionList.clear();
            for (int i = 0; i < permissions.length; i++) {
                if (ActivityCompat.checkSelfPermission(this, permissions[i]) != PackageManager.PERMISSION_GRANTED) {
                    permissionList.add(permissions[i]);
                }
            }

            if (!permissionList.isEmpty()) {
                ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), 1);
            }
        }
    }

    public void onClickCreateXMLButton(View view) {
        ArrayList<Person> personsList = new ArrayList<Person>();
        for (int i = 0; i < 10; i++) {
            personsList.add(new Person("antier", i, 1342093229, "shenzhen", "male"));
        }

        File file = new File(Environment.getExternalStorageDirectory(), "demo.xml");
        try {
            FileOutputStream fileOutputStream = new FileOutputStream(file);
            XmlSerializer serializer = Xml.newSerializer();
            serializer.setOutput(fileOutputStream, "utf-8");
            serializer.startDocument("utf-8", true);

            serializer.startTag(null, "persons");
            for (Person person : personsList) {
                serializer.startTag(null, "person");

                serializer.startTag(null, "name");
                serializer.attribute(null, "id", person.getAge() + "");//属性测试而已
                serializer.text(person.getName());
                serializer.endTag(null, "name");

                serializer.startTag(null, "age");
                serializer.text(person.getAge() + "");
                serializer.endTag(null, "age");

                serializer.startTag(null, "phoneNum");
                serializer.text(person.getPhoneNum() + "");
                serializer.endTag(null, "phoneNum");

                serializer.startTag(null, "address");
                serializer.text(person.getAddress());
                serializer.endTag(null, "address");

                serializer.startTag(null, "sex");
                serializer.text(person.getSex());
                serializer.endTag(null, "sex");

                serializer.endTag(null, "person");
            }
            serializer.endTag(null, "persons");
            serializer.endDocument();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void onClickParserXMLButton(View view) {
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(true);
            XmlPullParser xpp = factory.newPullParser();
            FileInputStream fileInputStream = new FileInputStream(Environment.getExternalStorageDirectory().getPath() + File.separator + "demo.xml");
            xpp.setInput(fileInputStream, "utf-8");
            int eventType = xpp.getEventType();
            while (eventType != XmlPullParser.END_DOCUMENT) {
                if (eventType == XmlPullParser.START_DOCUMENT) {
                    System.out.println("Start document");
                } else if (eventType == XmlPullParser.START_TAG) {
                    System.out.println("Start tag " + xpp.getName());
                } else if (eventType == XmlPullParser.END_TAG) {
                    System.out.println("End tag " + xpp.getName());
                } else if (eventType == XmlPullParser.TEXT) {
                    System.out.println("Text " + xpp.getText());
                }
                eventType = xpp.next();
            }
            System.out.println("End document");
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值