• 端午新经济体验无处不在 “指尖端午”玩出新花样 2019-08-18
  • 王俊凯:如何当一名实力睫毛健将 2019-08-18
  • 国家中医药管理局加强对中医养生类节目指导 2019-08-18
  • 北京一官员借单位换楼贪污受贿31万 退赃获轻判 2019-08-17
  • 【人事】中共临汾市委组织部公示3名拟任职干部 2019-08-17
  • 江苏阜宁县地震 地震时正确的逃生方法有哪些? 2019-08-17
  • [大笑]别一边骂着高房价,一边又跟着炒,那就是典型的既想……又想……了! 2019-08-17
  • 回复@“老笑头”,为什么老夫不能提“逻辑”?不是小看你,你有本人1%的逻辑思维能力就可以沾沾自喜了,就不会象那个“真理论者”似的在论坛上天天挨批了。哈哈哈哈! 2019-08-12
  • 本人几天前就吃了几个粽子了。 2019-08-09
  • 湖南第六批短期援藏队联合中南大学湘雅医院在山南市开展“爱眼护眼”活动 2019-08-07
  • 西部网(陕西新闻网)硬科技频道 2019-08-07
  • 主持人资料库――张越 2019-08-06
  • 四年前折翼日耳曼高峰 梅西如今能扛潘帕斯雄鹰飞多远 2019-08-06
  • 卖假证当黄牛 日韩3男子倒卖AKB48演唱会门票被捕 2019-08-06
  • 俄罗斯驻华大使:未来上合的首要任务是加强区域一体化 2019-08-06
  • 全国免费热线:
    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-08-18
  • 王俊凯:如何当一名实力睫毛健将 2019-08-18
  • 国家中医药管理局加强对中医养生类节目指导 2019-08-18
  • 北京一官员借单位换楼贪污受贿31万 退赃获轻判 2019-08-17
  • 【人事】中共临汾市委组织部公示3名拟任职干部 2019-08-17
  • 江苏阜宁县地震 地震时正确的逃生方法有哪些? 2019-08-17
  • [大笑]别一边骂着高房价,一边又跟着炒,那就是典型的既想……又想……了! 2019-08-17
  • 回复@“老笑头”,为什么老夫不能提“逻辑”?不是小看你,你有本人1%的逻辑思维能力就可以沾沾自喜了,就不会象那个“真理论者”似的在论坛上天天挨批了。哈哈哈哈! 2019-08-12
  • 本人几天前就吃了几个粽子了。 2019-08-09
  • 湖南第六批短期援藏队联合中南大学湘雅医院在山南市开展“爱眼护眼”活动 2019-08-07
  • 西部网(陕西新闻网)硬科技频道 2019-08-07
  • 主持人资料库――张越 2019-08-06
  • 四年前折翼日耳曼高峰 梅西如今能扛潘帕斯雄鹰飞多远 2019-08-06
  • 卖假证当黄牛 日韩3男子倒卖AKB48演唱会门票被捕 2019-08-06
  • 俄罗斯驻华大使:未来上合的首要任务是加强区域一体化 2019-08-06
  • 江苏时时彩官网 江西多乐彩11选五开奖结果 江苏快三游戏开奖直播 浙江11选5走势体彩 双色球官方的app 捕鱼达人之深海狩猎 腾讯分分彩必中软件 2019白菜娱乐平台论坛 福彩十五选五开奖号 福建十一选五开奖结果 极速飞艇计划答案 福建时时彩网络代销 欢乐斗地主内购破解 意甲小旋风分集 北单投注方式