美文网首页
xml解析数据 (pull解析)

xml解析数据 (pull解析)

作者: 吊浙 | 来源:发表于2019-08-09 14:04 被阅读0次

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

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

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

    • 简单介绍一下什么是pull解析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;
    错误
    

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

    相关文章

      网友评论

          本文标题:xml解析数据 (pull解析)

          本文链接:https://www.haomeiwen.com/subject/mrthjctx.html