pull方式解析xml文件以及用Serializer序列化器生成xml文件

xml解析之pull解析

  • pull解析xml文件的步骤:
    1.拿到XmlPullParserFactory工厂对象
    2.通过工厂对象拿到解析器(newPullParser())
    3.指定要被解析的xml文件的路径及解码格式
    4.获得事件的类型(getEventType())
    5.循环解析(当没有到文档结尾就一直的解析)

示例代码如下:

        @Test
    public void xmlPull() throws Exception {
        // 1,拿到XmlPullParserFactory工厂对象
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        // 2,通过工厂对象拿到解析器(newPullParser())
        XmlPullParser parser = factory.newPullParser();
        // 3指定要被解析的xml文件的路径及解码格式
        InputStream is = new FileInputStream("src/student.xml");
        parser.setInput(is, "UTF-8");

        // 4,获得事件的类型(getEventType())
        int type = parser.getEventType();
        List<Student> list = new ArrayList<Student>();
        Student stu = null;
        // 当不是文档的结束标签就一直循环的遍历
        while (type != XmlPullParser.END_DOCUMENT) {
            if (type == XmlPullParser.START_TAG) {
                if ("name".equals(parser.getName())) {
                    stu = new Student();
                    String name = parser.nextText();
                    stu.setName(name);
                } else if ("age".equals(parser.getName())) {
                    String age = parser.nextText();
                    stu.setAge(age);
                } else if ("city".equals(parser.getName())) {
                    String city = parser.nextText();
                    stu.setCity(city);
                }
            }else if(type==XmlPullParser.END_TAG){
                if("student".equals(parser.getName())){
                    list.add(stu);
                }
            }
            // 手动的得到下一个标签,并且一定要赋值给type,不然会死循环
            type = parser.next();
        }

        for (Student student : list) {
            System.out.println(student.toString());
        }
    }

被解析的xml文件

  • 文件如下
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<students>
    <student>
        <name>mcc</name>
        <age>18</age>
        <city>上海</city>
    </student>
    <student>
        <name>lw</name>
        <age>19</age>
        <city>深圳</city>
    </student>
</students>

通过Serializer序列化器生成xml文件

  • 生成步骤如下:
/**
     * 生成xml文件
     * 生成步骤:
     *  1,通过XmlPullParserFactory获得工厂对象
     *  2,通过上面得到的工厂对象拿到序列化对象Serializer的对象
     *  3,通过setOutput()把创建的xml文件写入到指定的目的地
     *  4,通过序列化对象,生成指定的标签
     * 
     * @throws Exception
     */
    @Test
    public void serializerTest() throws Exception {

        // 创建serializer工厂对象
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        // 通过工厂对象得到Serializer对象
        XmlSerializer serializer = factory.newSerializer();
        // 3,指定一个输出流setOutput();
        OutputStream os = new FileOutputStream("src/student.xml");
        //
        serializer.setOutput(os, "UTF-8");
        // 生成xml文件头
        serializer.startDocument("UTF-8", true);
        serializer.startTag(null, "students");

        serializer.startTag(null, "student");
        serializer.startTag(null, "name");
        serializer.text("mcc");
        serializer.endTag(null, "name");
        serializer.startTag(null, "age");
        serializer.text("18");
        serializer.endTag(null, "age");
        serializer.startTag(null, "city");
        serializer.text("上海");
        serializer.endTag(null, "city");
        serializer.endTag(null, "student");

        serializer.startTag(null, "student");
        serializer.startTag(null, "name");
        serializer.text("lw");
        serializer.endTag(null, "name");
        serializer.startTag(null, "age");
        serializer.text("19");
        serializer.endTag(null, "age");
        serializer.startTag(null, "city");
        serializer.text("深圳");
        serializer.endTag(null, "city");
        serializer.endTag(null, "student");

        serializer.endTag(null, "students");

        serializer.endDocument();
    }

这样xml的pull解析和通过Serializer序列化器生成xml文件的两个小demo就完成了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值