快速业务通道

J2ME中的XML语法分析利器KXML - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

J2ME中的XML语法分析利器KXML

时间:2011-04-11 game

Enhydra的KXML是一个只占很小存储空间的XML语法分析程序,对于J2ME应用程序非常适合 。它有一个非常独特的DOM操作方法和被称为Pull的语法分析方法。

在开发一个用于J2ME设备的多人游戏项目。在这个应用程序中,服务器和设备之间的通讯 原来被编码成由"&"分隔的键值对,这样从服务器检索变量会很快,但是当我开始处理更 复杂的数据结构和嵌套的数据结构时,我发现这种方法并不适用。在这种情况,它会变得很 难写数据并且容易出错。

为了解决这问题,我决定使用XML重新编写应用程序的数据传输部分。对于我来说,XML是 一个自然而然的选择,不仅仅因为我已经使用它在以前的一个项目中编写了通过网络向 applet中传送信息的程序,而且因为XML确实很容易调试和编写。当然,它还让你使用一种很 丰富的格式来结构化这些数据。然而,让我意想不到的是我竟为我的编程工具箱找到一颗珍 贵的宝石。

KXML是一个被设计用于J2ME设备的简化类库,虽然它也可以被用于其它需要小型XML语法 分析程序的环境,比如Applet。KXML是一个Enhydra维护的项目,支持下面的性能:

支持XML名称空间

用"松散"模式分析HTML或其它SGML格式

占用很少的存储空间(21 kbps)

基于Pull的分析

支持XML写操作

可选的DOM支持

可选的WAP支持

在本文中,详细说明其中的一些特点,尤其是Pull分析和DOM操作,而且我将告诉你如何 检查KXML在内存中操作的效果。本文中的两个MIDlet例程都有完整的源代码,可以向你说明 如何使用KXML(点击下载)。在KToolBar 1.04工程中不包含KXML类库--你必须从 http://KXML.enhydra.org/取得类库,然后把压缩文件放在工程的"lib"目录下。

使用XML工作

有两个常见的使用XML工作的方法:操作DOM或者捕捉语法分析事件。操作DOM是一个与XML 相互作用的简单方法,通常这个XML是一棵完整的XML树,被解析成一个存放在存储器中的节 点结构,你可以遍历这棵树。它非常简单易用,但是因为整棵树存在于存储器中造成存储器 的负担。

第二种方法在捕捉语法分析事件中,每当语法分析程序遇到数据中的特定结构,它就会遍 历XML数据,然后把结果发回前面注册的一个事件监听器中。比如说,当语法分析程序遇到一 个起始标记,如<html>,那么事件监听器将接收一个事件,通知它这个情况,并且向它传 递任何所需的信息。实现这种策略的语法分析程序被称为push语法分析程序,因为这个语法 分析程序把事件"推入"一个监听器中。

KXML支持DOM语法分析和操作,但是不支持push语法分析。取而代之,它使用一种稍微不 同的称为"Pull"的分析方法。与push语法分析相反,Pull语法分析让程序员从语法分析程序 中"拉"出下一个事件。在push语法分析中,你必须维护你正在分析的当前数据的状态,然后 基于传送到监听器的事件,恢复任何以前的状态,并且当你转换到一个不同的状态时保存新 的状态。Pull语法分析使处理状态改变更加容易,因为你可以发送分析器到不同的函数,维 护它们自己的状态变量。

J2ME中的XML语法分析利器KXML(2)

时间:2011-04-11 game

Pull语法分析

让我们来研究一个例子,看看KXML如何做一个Pull语法分析程序。演示程序名为 KXMLDemo_Pull。它将使用一个Pull语法分析程序查看一个包含通讯录信息的文件。下面给出 源代码中比较重要的几行,我还给出了注释。

1.XmlParser parser = null; 2...... 3.parser = new XmlParser( new InputStreamReader( 1this.getClass ().getResourceAsStream(resfile_name) ));

第三行创建了一个XmlParser,把它传到一个InputStream中。这个语法分析程序反复调用 ,直到出现EN

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号