PullXml解析Xml文件(一般用于安卓)

来源:互联网 发布:怎样提高淘宝店铺销量 编辑:程序博客网 时间:2024/04/29 16:37

在移动端,对Xml解析一般是使用PullXml解析,其实还有另外两种解析方式,Dom解析和SAX解析,各有优缺点,今天就先介绍Pull解析方式。

要想使用Pull解析,需要先导入jar包:

给出Xml文件如下:

<note>    <to>        小红    </to>    <to>        Allen    </to>    <from>        John    </from>    <heading font="微软雅黑" color="red">        Reminder    </heading>    <body>        <font>宋体五号</font>        <color>绿色</color>        <level>6</level>        <mesage>Don't forget the meeting!</mesage>    </body>    <body>        <font>Source Pro Code</font>        <color>black</color>        <level>1</level>        <message>里约</message>    </body></note>

由上文件,我们可以创建出实体类,用来保存从Xml文件读取到的信息

/** * project pullxmltest * package PACKAGE_NAME * Created by xsm on 2016/8/9. */public class Note {    private List<String> receivers;//用来保存读取到的<to>标签的内容    private String from;    //因为heading标签有属性,所以可以创建一个Heading类来保存其内容和属性值   private Heading heading;
    //用来保存读取到的<body>标签,因为<body>里面有子标签,所以需创建一个Body实体类
private LinkedList<Body> bodies; public String getFrom() { return from; } public void setFrom(String from) { this.from = from; } public Heading getHeading() { return heading; } public void setHeading(Heading heading) { this.heading = heading; } public LinkedList<Body> getBodies() { return bodies; } public void setBodies(LinkedList<Body> bodies) { this.bodies = bodies; } public List<String> getReceivers() { return receivers; } public void setReceivers(List<String> receivers) { this.receivers = receivers; } @Override public String toString() { return "Note{" + "receivers=" + receivers + ", from='" + from + '\'' + ", heading=" + heading + ", body='" + bodies + '\'' + '}'; }}
Heading实体类和Body实体类如下:

/** * project pullxmltest * package PACKAGE_NAME * Created by xsm on 2016/8/9. */public class Heading {    private String font;    private String color;    private String text;    public String getFont() {        return font;    }    public void setFont(String font) {        this.font = font;    }    public String getColor() {        return color;    }    public void setColor(String color) {        this.color = color;    }    public String getText() {        return text;    }    public void setText(String text) {        this.text = text;    }    @Override    public String toString() {        return "Heading{" +                "font='" + font + '\'' +                ", color='" + color + '\'' +                ", text='" + text + '\'' +                '}';    }}
/** * project pullxmltest * package PACKAGE_NAME * Created by xsm on 2016/8/9. */public class Body {    private String font;    private String color;    private int level;    private String message;    public String getFont() {        return font;    }    public void setFont(String font) {        this.font = font;    }    public String getColor() {        return color;    }    public void setColor(String color) {        this.color = color;    }    public int getLevel() {        return level;    }    public void setLevel(int level) {        this.level = level;    }    public String getMessage() {        return message;    }    public void setMessage(String message) {        this.message = message;    }    @Override    public String toString() {        return "Body{" +                "font='" + font + '\'' +                ", color='" + color + '\'' +                ", level=" + level +                ", message='" + message + '\'' +                '}';    }}
解析方式如下:

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.ArrayList;import java.util.LinkedList;/** * project pullxmltest * package PACKAGE_NAME * Created by xsm on 2016/8/9. */public class Test01 {    public static void main(String[] args) {        String src = "<note>\n" +                "    <to>\n" +                "        小红\n" +                "    </to>\n" +                "    <to>\n" +                "        Allen\n" +                "    </to>\n" +                "    <from>\n" +                "        John\n" +                "    </from>\n" +                "    <heading font=\"微软雅黑\" color=\"red\">\n" +                "        Reminder\n" +                "    </heading>\n" +                "    <body>\n" +                "        <font>宋体五号</font>\n" +                "        <color>绿色</color>\n" +                "        <level>6</level>\n" +                "        <mesage>Don't forget the meeting!</mesage>\n" +                "    </body>\n" +                "    <body>\n" +                "        <font>Source Pro Code</font>\n" +                "        <color>black</color>\n" +                "        <level>1</level>\n" +                "        <message>里约</message>\n" +                "    </body>\n" +                "</note>";        try {            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();            XmlPullParser parser = factory.newPullParser();            parser.setInput(new FileInputStream("res/test.xml"),"UTF-8");//给出Xml文件的地址,并指定编码            Note note = new Note();            note.setReceivers(new ArrayList<String>());            note.setBodies(new LinkedList<Body>());            int type;            while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) {                switch (type) {                    case XmlPullParser.START_DOCUMENT:                        System.out.println("文档开始");                        break;                    case XmlPullParser.START_TAG:                        switch (parser.getName()){                            case "to":                                note.getReceivers().add(parser.nextText().trim());                                break;                            case "from":                                note.setFrom(parser.nextText());                                break;                            case "heading":                                Heading heading = new Heading();                                heading.setFont(parser.getAttributeValue(null,"font"));                                heading.setColor(parser.getAttributeValue(null,"color"));                                heading.setText(parser.nextText());                                note.setHeading(heading);                                break;                            case "body":                                note.getBodies().add(new Body());                                break;                            case "font":                                note.getBodies().getLast().setFont(parser.nextText().trim());                                break;                            case "color":                                note.getBodies().getLast().setColor(parser.nextText().trim());                                break;                            case "level":                                note.getBodies().getLast().setLevel(Integer.parseInt(parser.nextText().trim()));                                break;                            case "message":                                note.getBodies().getLast().setMessage(parser.nextText().trim());                                break;                    }                        break;                    case XmlPullParser.TEXT:                        break;                    case XmlPullParser.END_TAG:                        System.out.println(parser.getName() + "标签结束");                        break;                }            }            System.out.println(note.getReceivers());            System.out.println(note.getBodies());            System.out.println(note.getHeading());        } catch (XmlPullParserException e) {            e.printStackTrace();        } catch (FileNotFoundException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    }}
得到结果如下图:

解析过程中的方法如有不懂可以参考http://www.kxml.org/javadoc/index.html

0 0
原创粉丝点击