J2ME——XmlReader学习总结

       kobject.org 网站上提供了一个轻量级的xmlReader程序,大家可以到http://kobjects.sourceforge.net/utils/ 获取。作为简单的xml解析器,功能上与kxml类似,但是不支持命名空间和一些传统的事件。整个jar文件大小小于5KB。
xml 在j2me上的使用,kxml是首当其冲的老大。它实现了xmlpull的api,提供了很严谨的移动设备上的xml读写功能。

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兼容的解析器。
 
关键字解析器(XmlReader )事件(= 位置)
 
XmlReader主要有以下几种事件类型:
    /** Return value of getType before first call to next() */
public final static int START_DOCUMENT = 0;
 
    /** Signal logical end of xml document */
    public final static int END_DOCUMENT = 1;
 
    /** Start tag was just read */
    public final static int START_TAG = 2;
 
    /**End tag was just read*/
    public final static int END_TAG = 3;
 
    /** Text was just read */
    public final static int TEXT = 4;
其他类型具体可参阅源代码。。。。。。
 
首先,通过下面代码完成了与xml文档的Stream连接;
           InputStream ins=this.getClass().getResourceAsStream("/properties.xml");
。。。。。
                  InputStreamReader reader=new InputStreamReader(ins);
                  xmlReader=new XmlReader(reader);
此时,不能对xml文档进行解析。这时要调用next()方法,来将xmlReader置于START_DOCUMENT状态(第一次调用时 next解析器xmlReader的状态),以后便可以对 xml文档进行解析了。
 
解析器是如何对xml文档进行解析的呢?
XmlReader将xml文档看成是由一系列事件所组成的,XmlReader 是通过 next()接口来触发事件,从而完成对xml文档的读取与解析的。
<start>text</start>
<start>:代表的是开始事件(START_TAG)
Text:代表的是文本事件(TEXT)
</start>:代表的是结束事件(END_TAG)
 
每调用一次next接口就是触发下一事件,即跳转到下一事件。
 
譬如,如下代码的解析过程:
 
<?xml version="1.0"?>
<Stations>
<station Idx="BJGZ01">T12#T14#T16</station>
<station Idx="BJGZ02">T13#T15#T17</station>
</Stations>
 
InputStream ins=this.getClass().getResourceAsStream("/properties.xml");
InputStreamReader reader=new InputStreamReader(ins);
xmlReader=new XmlReader(reader);
xmlReader.next();//执行完这句代码以后,解析器XmlReader所处的事件即为//START_DOCUMENT ,所对应 xml 文档中的位置为 <Stations> 若此时调用next接口,则事件类型将变为TEXT。这是因为 <Stations> 后面的任何东西(空格、回车换行等等一切)在解析器看来均是 TEXT 。如果将 xml 文档改为如下格式
<Stations><station Idx="BJGZ01">T12#T14#T16</station><station Idx="BJGZ02">T13#T15#T17</station></Stations>
则调用next接口,则事件类型将变为START_TAG。
 
当解析器处于TEXT事件中时,即对应到TEXT部分时,可以调用getText()取得TEXT内容。
解析器可以调用getPositionDescription()得到当前所处的事件的信息。
getAttributeValue()根据参数可以得到当前事件的属性值
 
require()这是可以用于测试当前所属事件是否是所指定的事件类型。
比如xmlReader.require(XmlReader.END_TAG,"station");即为判断当前事件是否是station的结束标志,也可以这么理解:判断当前位置是否是在于 </station>
 
getType()用于取得当前事件的类型
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值