xml的使用及详解

来源:互联网 发布:华莱士 知乎 编辑:程序博客网 时间:2024/06/04 23:27

xml语言介绍

  xml是w3c这个组织研发的

     xml指可扩展(标签可以自己定义student)标记(标签)语言

   xml的作用 

      ①可以描述现实生活中的数据
           ②可以作为应用程序的配置文件 比如android工程的布局文件.
           ③作为应用程序传输的数据格式

  xml的使用

      常见的码表  assic --->iso-8859-1--->gbk gb2312(收录汉字不一样多)--->utf-8;
              ①直接使用eclipse创建既可  
              ②文档声明 <?xml version="1.0" encoding="UTF-8"?>
              ③ xml对大小写敏感   开始标签和结束标签成对出现 xml必须有且仅有一个根标签  属性值必须加引号
              ④ xml中注释   <!-- -->
              ⑤ cdata区里面的内容不会被解析器解析 

xml解析技术介绍

   xml分类

     
                        特点:基于XML文档树的解析,将整个XML文件加载到内存中,会在内存中形成一颗树形结构
                        优点:整个文档树在内存中,便于操作,检索和更新效率高,可进行增删改查等逻辑操作;
                        缺点:由于整个XML文件(包含无用的节点)都被加载到内存中,浪费时间和空间。内存溢出可能性较大 
                        使用场景:当需要对它进行增删改查等操作,并需要多次对它进行访问;硬件资源充足(CPU、内存)              
           SAX  
                        特点:基于事件流的解析,根据文档内容顺序,一行一行进行解析,边解析边释放,会对整个文档进行解析,中间不能终止暂停
                        优点:占用内存小,解析速度快,内存溢出的可能性较小
                        缺点:操作复杂,只能进行查,不能进行增删改等逻辑操作;不能控制事件的处理主动结束;单向导航无法定位文挡层次,很难访问同一个文档中的不同部分数据;不持久,事件过后,若没保存数据,数据就丢了;从事件中只能得到文本,不知道该文本属于哪个元素
                        使用场景:只需XML文档的少量内容,很少回头访问,机器内存少
            
                        特点:是安卓中内置的解析器,它的解析原理类似SAX解析,都是基于事件的解析;不同的是,在pull解析中,我们需要自己获取产生的事件然后做出相应的操作,而SAX解析是由处理器触发一种事件的方法,执行我们的操作。
                        优点:可以在满足需要的条件后不再获取事件,结束解析;小巧轻便,解析速度快,简单易用
 1 public static List<News> parserXml(InputStream is) { 2         List<News> lists=null; 3         News news = null; 4         // [1]获取解析器 xmlpullparser 5         XmlPullParser parser = Xml.newPullParser(); 6         // [2]设置解析器要解析的内容 7         try { 8             parser.setInput(is, "utf-8"); 9             // [3]获取解析器的事件类型10             int eventType = parser.getEventType();11             // [4]不到文件结尾就一直解析12             while (eventType != XmlPullParser.END_DOCUMENT) {13                 // [5]具体判断一下解析到的标签 然后把我们关系的数据取出来 封装到集合中14                 switch (eventType) {15                     case XmlPullParser.START_TAG: //代表解析到的所有开始的标签16                         //[6]具体判断一下解析到的是哪个开始标签17                         if ("channel".equals(parser.getName())) {18                             //[7]创建一个集合对象19                             lists =new ArrayList<News>();20                         }else if ("item".equals(parser.getName())) {21                             //[8]创建javabean对象22                             news = new News();23                         }else if ("title".equals(parser.getName())) {24                             //[8.1]获取文本的数据25                             news.setTitle(parser.nextText());26                         }else if ("description".equals(parser.getName())) {27                             //[8.1]获取文本的数据28                             news.setDescription(parser.nextText());29                         }else if ("image".equals(parser.getName())) {30                             //[8.1]获取文本的数据31                             news.setImagepath(parser.nextText());32                         }else if ("type".equals(parser.getName())) {33                             //[8.1]获取文本的数据34                             news.setType(parser.nextText());35                         }else if ("comment".equals(parser.getName())) {36                             //[8.1]获取文本的数据37                             news.setComment(parser.nextText());38                         }39                         break;40                     case XmlPullParser.END_TAG:   //解析到的所有的结束标签41                         if("item".equals(parser.getName())){42                             //把bean对象加入到集合中43                             lists.add(news);44                         }45                         break;46                 }47                 // 不停解析48                 eventType = parser.next();49             }50             //最后把集合对象返回51             return lists;52         } catch (Exception e) {53             e.printStackTrace();54             return null;55         }56     }
原创粉丝点击