Chinaunix首页 | 论坛 | 博客
  • 博客访问: 334825
  • 博文数量: 1051
  • 博客积分: 53280
  • 博客等级: 大将
  • 技术积分: 6670
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 13:21
文章分类

全部博文(1051)

文章存档

2011年(1)

2008年(1050)

我的朋友

分类:

2008-09-09 16:48:00

    一、kxml的前身--xmlpull
  
  xmlpull提供了为资源有限的环境(如j2me)和j2ee应用使用的xml解析API,xml pull解析允许使用stream解析的方式。
  
  xmlpull的特点:
  
  * 简单的接口-解析器包含一个接口、一个异常、一个建立解析器的factory;
  
  * 无实现依赖-模仿JAXP的factory类和很容易的切换不同的XmlPull V1 API实现,而无需修改代码;
  
  * 易用性-只有唯一的next()方法用来读取下面5类事件中的一个:
  
  START DOCUMENT-文档起始点,这时解析器还没有准备好读取文档;
  
  START_TAG-解析器读取到了element声明的开始标签,就是xml文件中声明element用的"<";
  
  TEXT-解析器读取到了element的内容,如element的各种属性和value;
  
  END_TAG-解析器读取到了element声明的结束标签,就是"/>"或者"";
  
  END_DOCUMENT-解析器读取到文档的结尾,解析工作完毕。
  
  * 多功能性-由于提供了xml解析器的通用接口,所以允许多个实现和在特性和属性上的扩展
  
  * 良好的性能-由于提供了通用的接口,可以说也就为使用快速的xml解析器提供了条件,但是目前最快的解析器,本人还没遇到过。:-)
  
  * 最小化需要-设计上与j2me兼容,从而使其能工作于小型设备和建立使用微量内存的xmlPull兼容的解析器。
  
  二、建立在良好构架上的kxml
  
  xmlpull api提供的通用的xml内容解析功能使用方式:使用一个循环来遍历到下一个事件,并切换到一个针对这个事件的分支语句处理。但是在使用xml解析器时,一些xml element不仅包括text还有其它的element(被称为子元素或者内嵌元素)。对于这样的xml数据,解析处理被简单化到了使用xmlpull api的nextTag和nextText方法。另外,require方法也可以使用一个解析状态的参数来表示希望取得数据的event类型。以上就是kxml使用方法。
  
  如解析下面内容的简单xml文件:
  
  text1
  text2

  
  解析代码片断如下:
  parser.nextTag();parser.require(XmlPullParser.START_TAG, null, "elements");
  while(parser.nextTag() == XmlPullParser.START_TAG) { parser.require(XmlPullParser.START_TAG, null, "text");
  // handle element content  System.out.println("text content: "+ parser.nextText());
  parser.require(XmlPullParser.END_TAG, null, "text");}parser.require(XmlPullParser.END_TAG, null, "elements");
  
  从上面的代码看出,的确很简单明了。
  
  三、背向kxml的原因
  
  但是如果真正的使用kxml开发j2me程序时会发现,kxml包和其依赖的xmlpull包不仅无形中增加了程序发布时的大小,而且由于没有最好的解析器带来的负面性能损耗会随着xml文件的大小成非线性增长(还好不是指数级的)。这些成为了kxml的流行障碍。

[1]  

【责编:Ken】

--------------------next---------------------

阅读(143) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~