• 工信部:鼓励婴幼儿配方乳企质量安全追溯体系建设 2019-06-16
  • 湖北浠水十月村经济史料及其研究价值 2019-06-12
  • 日本积极筹划“安金会” 日朝已在蒙古进行接触 2019-06-12
  • 人民日报快评:真情和担当镌刻丰碑 2019-06-07
  • 总有一朵花是你 美丽中国《美的人》 2019-06-07
  • 第二届环球人物金融科技领军人物榜 2019-06-05
  • 全纪录600名工人为“重庆铁路咽喉”动手术  奋战7个通宵为旅客节约1小时 2019-06-03
  • 临汾市脑卒中急救溶栓地图发布 2019-06-03
  • 此理论大体可以这样理解,即一个市场中的经济实体为追求最大的利润,多次进行扩大生产,每一次投资所产生的效益都会与上一次投资产生的效益之间要有一个差,这个差就是边际 2019-05-31
  • 三角洲旅行地中国国家地理网 2019-05-31
  • 佳能居首奥巴击败索尼 BCN公布日本相机销售排行 2019-05-27
  • 推动形成全面开放新格局 开启新时代开放新征程 2019-05-24
  • 大众汽车因“尾气门”向德国检方认罚10亿欧元 2019-05-19
  • 没想到最大亮点是越野! 试驾一汽 2019-05-19
  • 中船重工总经理孙波涉嫌严重违纪违法被查 2019-05-15
  • 全国免费热线:
    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-06-16
  • 湖北浠水十月村经济史料及其研究价值 2019-06-12
  • 日本积极筹划“安金会” 日朝已在蒙古进行接触 2019-06-12
  • 人民日报快评:真情和担当镌刻丰碑 2019-06-07
  • 总有一朵花是你 美丽中国《美的人》 2019-06-07
  • 第二届环球人物金融科技领军人物榜 2019-06-05
  • 全纪录600名工人为“重庆铁路咽喉”动手术  奋战7个通宵为旅客节约1小时 2019-06-03
  • 临汾市脑卒中急救溶栓地图发布 2019-06-03
  • 此理论大体可以这样理解,即一个市场中的经济实体为追求最大的利润,多次进行扩大生产,每一次投资所产生的效益都会与上一次投资产生的效益之间要有一个差,这个差就是边际 2019-05-31
  • 三角洲旅行地中国国家地理网 2019-05-31
  • 佳能居首奥巴击败索尼 BCN公布日本相机销售排行 2019-05-27
  • 推动形成全面开放新格局 开启新时代开放新征程 2019-05-24
  • 大众汽车因“尾气门”向德国检方认罚10亿欧元 2019-05-19
  • 没想到最大亮点是越野! 试驾一汽 2019-05-19
  • 中船重工总经理孙波涉嫌严重违纪违法被查 2019-05-15