关闭

pull和sax解析xml文件

179人阅读 评论(0) 收藏 举报
分类:
/***
     * pull解析
     **/
    public void parseXMLWithPull(String xmlData) {
        try {
            XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            XmlPullParser parser = factory.newPullParser();
            parser.setInput(new StringReader(xmlData));
            int evenType = parser.getEventType();
            String id = "";
            String name = "";
            String version = "";
            while (evenType != XmlPullParser.END_DOCUMENT) {
                String nodeName = parser.getName();
                switch (evenType) {
                    //开始解析某个结点
                    case XmlPullParser.START_TAG:
                        if ("id".equals(nodeName)) {
                            id = parser.nextText();
                        } else if ("name".equals(nodeName)) {
                            name = parser.nextText();
                        } else if ("version".equals(nodeName)) {
                            version = parser.nextText();
                        }
                        break;
                    //完成解析某个结点
                    case XmlPullParser.END_TAG:
                        if ("app".equals(nodeName)) {
                            Log.i("xmlParseActivity", "id is " + id);
                            Log.i("xmlParseActivity", "name is " + name);
                            Log.i("xmlParseActivity", "version is " + version);
                        }
                        break;
                    default:
                        break;
                }
                evenType = parser.next();
            }
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /***
     * SAX解析
     ***/
    public void parseXmLWithSAX(String xmlData) {
        try {
            SAXParserFactory factory = SAXParserFactory.newInstance();
            XMLReader reader = factory.newSAXParser().getXMLReader();
            //将ContentHandler的实例设置到XMLReader中
            ContentHandler handler = new ContentHandler();
            reader.setContentHandler(handler);
            //开始执行解析
            reader.parse(new InputSource(new StringReader(xmlData)));
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /***
     * SAX解析调用的方法
     ***/
    public class ContentHandler extends DefaultHandler {
        private String nodeName;
        private StringBuilder id;
        private StringBuilder name;
        private StringBuilder version;

        public ContentHandler() {
            super();
        }

        @Override
        public void startDocument() throws SAXException {
            super.startDocument();
            id = new StringBuilder();
            name = new StringBuilder();
            version = new StringBuilder();
        }

        @Override
        public void endDocument() throws SAXException {
            super.endDocument();
        }

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            //记录当前结点名
            nodeName = localName;
        }

        @Override
        public void endElement(String uri, String localName, String qName) throws SAXException {
            super.endElement(uri, localName, qName);
            if ("app".equals(localName)) {
                Log.i("contentHandler", "id is " + id.toString().trim());
                Log.i("contentHandler", "name is " + name.toString().trim());
                Log.i("contentHandler", "version is " + version.toString().trim());
                //最后将StringBuilder清空掉
                id.setLength(0);
                name.setLength(0);
                version.setLength(0);
            }
        }

        @Override
        public void characters(char[] ch, int start, int length) throws SAXException {
            super.characters(ch, start, length);
            //根据当前的结点名判断将内动添加到哪一个StringBuilder对象中
            if ("id".equals(nodeName)) {
                id.append(ch, start, length);
            } else if ("name".equals(nodeName)) {
                name.append(ch, start, length);
            } else if ("version".equals(nodeName)) {
                version.append(ch, start, length);
            }
        }
    }
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

利用Dom,Sax,Pull三种方式解析xml文件

最近找工作,看到许多公司的要求里都写了要会xml解析,所以就把之前的xml解析知识又重新回顾了一下,写个小例子. 解析xml文件常用的几种方式也就dom,sax,pull了,并且面试官经常问到的也是这...
  • qiang_xi
  • qiang_xi
  • 2015-11-29 20:15
  • 1153

XML使用SAX解析与PULL解析的区别

XML使用SAX解析与PULL解析的区别在最近的应用中,经常会用到对XML的解析,但是一直有一个疑问就是SAX解析与PULL解析的区别到底是什么。搜索了相关的问题,整理如下,以便大家查询。我们知道,S...
  • zhliro
  • zhliro
  • 2015-07-10 15:18
  • 1912

Android中三种常用解析XML的方式(DOM、SAX、PULL)简介及区别

XML在各种开发中都广泛应用,Android也不例外。作为承载数据的一个重要角色,如何读写XML成为Android开发中一项重要的技能。今天就由我向大家介绍一下在Android平台下几种常见的XML解...
  • cangchen
  • cangchen
  • 2015-03-03 10:17
  • 3629

Java解析xml文档之SAX解析

sax解析是一种边读边解析,仅向前读取,不能修改,用来读。sax创建XMLReader三步:SAXParserFactory factory = SAXParserFactory.newInstanc...
  • new___Smile
  • new___Smile
  • 2016-07-16 00:59
  • 3522

XML解析的两种方式:DOM方式和SAX方式

DOM:Document ObjectModel,文档对象模型。这种方式是W3C推荐的处理XML的一种方式。 SAX:Simple API for XML。这种方式不是官方标准,属于开源社区XML-D...
  • u012526194
  • u012526194
  • 2015-09-26 14:17
  • 3353

QT开发(四十三)——SAX方式解析XML

QT开发(四十三)——SAX方式解析XML一、SAX简介SAX是Simple API for XML的简写,是一种解析XML文件的替代方法,不是由W3C官方所提出的标准,是一种事件驱动的XML API...
  • A642960662
  • A642960662
  • 2017-03-26 12:47
  • 267

使用SAX解析将xml的文件内容结构保存到java对象中

在Java使用Sax解析xml文件中,我们介绍了如何用SAX解析xml文件,接下来我们继续学习如何将一个xml文件的内容结构保存到一个java实例对象中 一、xml文件如下 计...
  • kingsonyoung
  • kingsonyoung
  • 2016-07-22 15:17
  • 1437

java中用SAX解析XML

原文地址:http://www.cnblogs.com/allenzheng/archive/2012/12/01/2797196.html 注:考虑到自己程序中表结构比较大,有几百个字段,再加...
  • w2393040183
  • w2393040183
  • 2016-07-15 11:11
  • 1656

理解SAX解析xml的工作原理

摘要: SAX以事件流来解析xml,边读边触发事件函数完成解析,适用于较大XML; DOM加载整个xml文件,最终在内存中创建一个DOM树,适合小XML文件,操作DOM节点比较简便。 dom比较好理解...
  • u011854789
  • u011854789
  • 2017-01-02 16:17
  • 1002

java--通过sax方式解析xml文件的简单实例

1.重写的继承自DefaultHandler的方法,部分代码如下: @Override public void startElement(String uri, String localName,...
  • a1491758730
  • a1491758730
  • 2015-10-18 09:36
  • 763
    个人资料
    • 访问:96367次
    • 积分:1855
    • 等级:
    • 排名:千里之外
    • 原创:94篇
    • 转载:36篇
    • 译文:0篇
    • 评论:11条
    最新评论