xml解析数据 (pull解析)

2019-08-09  本文已影响0人  吊浙

这是一个重要的问题---什么是 XML?

  1. XML 指可扩展标记语言(EXtensible Markup Language)
  2. XML 是一种标记语言,很类似 HTML
  3. XML 的设计宗旨是传输数据,而非显示数据
  4. XML 标签没有被预定义。您需要自行定义标签。
  5. XML 被设计为具有自我描述性。
  6. XML 是 W3C 的推荐标准

xml数据结构有很多种解析数据的方式今天我们先来说一下pull解析

        FileInputStream fileInputStreamOFD = new FileInputStream(path + "/image2" + "/aaa.xml");

这是以文件形式读取的流 解析文件的时候要把流的形式读
我们解析的方法提成一个类

public class ParserByPull {
    //采用XmlPullParser来解析文件
    public static List<Bean> get(InputStream inputStream) throws Throwable {
        List<Bean> beanlist = null;
        Bean bean = null;
        //创建XmlPullParser
        XmlPullParser parser = Xml.newPullParser();
        //解析文件输入流
        parser.setInput(inputStream, "UTF-8");
        //得到当前的解析对象
        int eventType = parser.getEventType();
        //当解析工作还没完成时,调用next()方法得到下一个解析事件
        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
                case XmlPullParser.START_DOCUMENT:
                    //解析开始的时候初始化list
                    beanlist = new ArrayList<>();
                    break;
                case XmlPullParser.START_TAG:
                    //获得解析器当前指向的元素的名字
                    String XPPname = parser.getName();
                    if ("DocInfo".equals(XPPname)) {
                        bean = new OfdBean();
                    }
                    if (bean != null) {
                        if ("DocID".equals(XPPname)) {
                            //得到当前指向元素的值并赋值给name
                            bean.setDocID(parser.nextText());
                        }
                        if ("CreationDate".equals(XPPname)) {
                            //得到当前指向元素的值并赋值给age
                            bean.setCreationDate(parser.nextText());
                        }
                        if ("CreatorVersion".equals(XPPname)) {
                            //得到当前指向元素的值并赋值给sex
                            bean.setCreatorVersion(parser.nextText());
                        }
                        if ("DocRoot".equals(XPPname)) {
                            //通过解析器获取id的元素值,并设置一个新的Student对象的id
                            bean.setDocRoot(parser.nextText());
                        }
                    }
                    break;
                        //出发结束元素事件
                        case XmlPullParser.END_TAG:
                            if ("OFD".equals(parser.getName())) {
                                beanlist.add(bean);
                                bean = null;
                            }
                            break;
                        default:
                            break;
                    }
                    eventType = parser.next();
            }
            return beanlist;
        }
    }

由于这是事件驱动我们来看一下事件

int START_DOCUMENT = 0;
开始解析
    int END_DOCUMENT = 1;
结束解析
    int START_TAG = 2;
开始标
    int END_TAG = 3;
结束标
    int TEXT = 4;
下一个
    int ENTITY_REF = 6;
错误

还有很多。。。。
大家看源码去 大致的流程就是这样的

上一篇下一篇

猜你喜欢

热点阅读