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 }