技术中心

这里象征着我们的态度和能力

XML的解析与生成
作者:中国IT实验室    来源:中国IT实验室    发布时间:2012-09-14      浏览次数:15032
分享到:
欢迎进入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(“http://xml.org/sax/features/namespaces”, true);
   
    SaxHandler handler = new SaxHandler();
   
    parser.parse(is, handler);
   
    return handler.getMusics();
   
    }
   
    }


[1] [2] 下一页

上一篇:

下一篇: 前台开发要求与测试

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号 增值电信业务经营许可证号:滇B2-20110045
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730