• 制造业如何在坚守中求变 2019-04-23
  • 晋中市“三同步”推动互联网治理创新 2019-04-23
  • 提前享受肯定会逐步成为美谈呢。 2019-04-13
  • 强势发力体育营销 世界杯中国企业改变“旁观”窘状 2019-04-13
  • 山西日报系列评论:三晋之声 2019-04-12
  • 全军启动826门军事职业教育重点课程建设任务 2019-04-12
  • 楼阳生同志政务活动报道集——黄河新闻网 2019-04-05
  • 汉腾全新纯电车-酷似捷豹E-PACE 续航超400km 2019-04-05
  • “舌尖”之后, “风味”能否再续辉煌? 2019-04-04
  • 四川雅江:消防战士扑灭山火后  录视频给父母拜年 2019-03-31
  • 说【“腐败分子是天上掉下来的吗?”——这是四两千斤向第十阶层发问】纯属造谣。{千金}先生这是对【风水神】本人的发问,我的唯一个回帖是给{千金}:这个跟帖回得好。 2019-03-31
  • 紫光阁中共中央国家机关工作委员会 2019-03-30
  • 西安明德门遗址保护工程启动 将1∶1异地重现五门道城门明德门保护-要闻 2019-03-30
  • C罗逆天戴帽引名嘴狂吹!詹俊:永恒记忆 黄健翔:核武器 2019-03-28
  • 2019款马自达MX-5 Miata 驾驶能力提升 2019-03-23
  • 全国免费热线:
    XML的解析与生成
    作者:中国IT实验室 点击:12159次 日期:2012-09-14
    字号::T | T
    欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入
        Android平台上可以使用 Simple API for XML (SAX), Document Object Model(DOM) 和Android 附带的pull解析器 解析XML文件
       
        众所周知,DOM解析方式很耗内存, 优先使用SAX或者pull
       
        SAX:
       
        解析速度快,占用内存少,采用事件驱动,即不需要加载完整个文档,而是按内容顺序解析文档,在此过程中,其会判断当前读到的内容是否符合XML语法定义,如果符合就会触发事件,所谓事件,其实就是一些callback方法,具体方法含义比较简单, 看文档即可,定义在DefaultHandler接口中(SAX已内置到JDK5.0中)
       
        待解析xml文件musics.xml:
       
        xml version=“1.0” encoding=“utf-8”?>
       
       
       
        黑色幽默name>
       
        JayalbumName>
       
        2000year>
       
        music>
       
       
       
        爱在西元前name>
       
        范特西albumName>
       
        2001year>
       
        music>
       
       
       
        回到过去name>
       
        八度空间albumName>
       
        2002year>
       
        music>
       
       
       
        东风破name>
       
        叶惠美albumName>
       
        2003year>
       
        music>
       
       
       
        七里香name>
       
        七里香albumName>
       
        2004year>
       
        music>
       
       
       
        一路向北name>
       
        十一月的萧邦albumName>
       
        2005year>
       
        music>musics>
       
        实体类MusicEntity就不贴了,四个属性,上面的xml中也可以看出。
       
        实现了DefaultHandler接口的SaxHandler:
       
        public class SaxHandler extends DefaultHandler{
       
        private static final String TAG = “lanyan”;
       
        private List musics;
       
        private MusicEntity music;
       
        //缓存上一次的标签名
       
        private String preTag;
       
        @Override
       
        public void startDocument() throws SAXException {
       
        musics = new ArrayList();
       
        }
       
        @Override
       
        public void startElement(String uri, String localName, String qName,
       
        Attributes attributes) throws SAXException {
       
        if (“music”.equals(localName)) {
       
        music = new MusicEntity();
       
        music.setId(Integer.parseInt(attributes.getValue(“id”)));
       
        }
       
        preTag = localName;
       
        }
       
        /**
       
        * 解析到文档中字符内容时调用
       
        * 所以一般网络中传输的xml,其父节点与子节点之间是紧挨在一起的,基本上就是一行,看起来很混乱,其实是为了避免解析时无必要的调用
       
        * 这里仅是测试,故忽略这个因素
       
        */
       
        @Override
       
        public void characters(char[] ch, int start, int length)
       
        throws SAXException {
       
        if (null != music) {
       
        String str = new String(ch, start, length);
       
        if (“name”.equals(preTag)) {
       
        music.setName(str);
       
        } else if (“albumName”.equals(preTag)) {
       
        music.setAlbumName(str);
       
        } else if (“year”.equals(preTag)) {
       
        music.setYear(Integer.parseInt(str));
       
        }
       
        }
       
        }
       
        @Override
       
        public void endElement(String uri, String localName, String qName)
       
        throws SAXException {
       
        if (“music”.equals(localName) && null != music) {
       
        musics.add(music);
       
        music = null;
       
        }
       
        preTag = null;
       
        }
       
        @Override
       
        public void endDocument() throws SAXException {
       
        }
       
        public List getMusics() {
       
        return musics;
       
        }
       
        }
       
        对外提供SAX解析服务的接口SaxService:
       
        public class SaxService {
       
        public static List readXml(InputStream is) throws Exception {
       
        SAXParserFactory saxFactory = SAXParserFactory.newInstance();
       
        SAXParser parser = saxFactory.newSAXParser();//
       
        parser.setProperty(“//xml.org/sax/features/namespaces”, true);
       
        SaxHandler handler = new SaxHandler();
       
        parser.parse(is, handler);
       
        return handler.getMusics();
       
        }
       
        }


    [1] [2] 下一页

    发表评论

    昵称 * 验证码 * 验证码
    上一篇: >使用java编写排序算法
    下一篇: 常见JSP中文乱码例子及其解决方法

    资质证书

    CMMI Ⅲ APPRAISAL ID:30062
    ISO9001:08915Q20090ROS
    ISO27001:04817I20037R0S
    高新技术企业:GR201753000141
    网站问题免费诊断

    电子商务三位一体发展战略

    技术研发

    业务培训

    实战运营

    战略布局

  • 制造业如何在坚守中求变 2019-04-23
  • 晋中市“三同步”推动互联网治理创新 2019-04-23
  • 提前享受肯定会逐步成为美谈呢。 2019-04-13
  • 强势发力体育营销 世界杯中国企业改变“旁观”窘状 2019-04-13
  • 山西日报系列评论:三晋之声 2019-04-12
  • 全军启动826门军事职业教育重点课程建设任务 2019-04-12
  • 楼阳生同志政务活动报道集——黄河新闻网 2019-04-05
  • 汉腾全新纯电车-酷似捷豹E-PACE 续航超400km 2019-04-05
  • “舌尖”之后, “风味”能否再续辉煌? 2019-04-04
  • 四川雅江:消防战士扑灭山火后  录视频给父母拜年 2019-03-31
  • 说【“腐败分子是天上掉下来的吗?”——这是四两千斤向第十阶层发问】纯属造谣。{千金}先生这是对【风水神】本人的发问,我的唯一个回帖是给{千金}:这个跟帖回得好。 2019-03-31
  • 紫光阁中共中央国家机关工作委员会 2019-03-30
  • 西安明德门遗址保护工程启动 将1∶1异地重现五门道城门明德门保护-要闻 2019-03-30
  • C罗逆天戴帽引名嘴狂吹!詹俊:永恒记忆 黄健翔:核武器 2019-03-28
  • 2019款马自达MX-5 Miata 驾驶能力提升 2019-03-23