xml的使用及详解

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     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值