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

来源:互联网 发布:windows返回快捷键 编辑:程序博客网 时间:2024/05/17 05:18

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就完成了

0 0
原创粉丝点击