仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 551|回复: 10
打印 上一主题 下一主题

[学习教程] JAVA网站制作之J2ME中的XML语法剖析利器KXML

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:13:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
唉!都是钱闹的1.Swing和.net开发比较------从市场份额看.net开发主要占据大部分的中小型和中型的的桌面开发,原因是它封装了很多工具xml|语法  Enhydra的KXML是一个只占很小存储空间的XML语法剖析程序,关于J2ME使用程序十分合适。它有一个十分共同的DOM操纵办法和被称为Pull的语法剖析办法。

  在开辟一个用于J2ME设备的多人游戏项目。在这个使用程序中,服务器和设备之间的通信本来被编码成由"&"分开的键值对,如许从服务器检索变量会很快,可是当我入手下手处置更庞大的数据布局和嵌套的数据布局时,我发明这类办法其实不合用。在这类情形,它会变得很难写数据而且简单堕落。

  为懂得决这成绩,我决意利用XML从头编写使用程序的数据传输部分。关于我来讲,XML是一个天然而然的选择,不单单由于我已利用它在之前的一个项目中编写了经由过程收集向applet中传送信息的程序,并且由于XML的确很简单调试和编写。固然,它还让你利用一种很丰厚的格局来布局化这些数据。但是,让我意想不到的是我竟为我的编程工具箱找到一颗可贵的宝石。

  KXML是一个被计划用于J2ME设备的简化类库,固然它也能够被用于别的必要小型XML语法剖析程序的情况,好比Applet。KXML是一个Enhydra保护的项目,撑持上面的功能:

  撑持XML称号空间

  用"松懈"形式剖析HTML或别的SGML格局

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

  基于Pull的剖析

  撑持XML写操纵

  可选的DOM撑持

  可选的WAP撑持

  在本文中,具体申明个中的一些特性,特别是Pull剖析和DOM操纵,并且我将告知你怎样反省KXML在内存中操纵的效果。本文中的两个MIDlet例程都有完全的源代码,能够向你申明怎样利用KXML(点击下载)。在KToolBar1.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语法剖析使处置形态改动加倍简单,由于你能够发送剖析器到分歧的函数,保护它们本人的形态变量。

  Pull语法剖析

  让我们来研讨一个例子,看看KXML怎样做一个Pull语法剖析程序。演示程序名为KXMLDemo_Pull。它将利用一个Pull语法剖析程序检察一个包括通信录信息的文件。上面给出源代码中对照主要的几行,我还给出了正文。

  1.XmlParserparser=null;

  2......

  3.parser=newXmlParser(newInputStreamReader(1this.getClass().getResourceAsStream(resfile_name)));

  第三行创立了一个XmlParser,把它传到一个InputStream中。这个语法剖析程序重复挪用,直到呈现END_DOCUMENT事务。

  1.while((event=parser.read()).getType()!=Xml.END_DOCUMENT){

  2....

  3.if(name!=null&&name.equals("address")){

  4....

  5.parseAddressTag(parser);

  第三行判别事务是不是以一个<address>标志入手下手,第五行传送语法剖析器到把持语法剖析程序的"parseAddressTag"。

  1.while((event=parser.peek()).getType()!=Xml.END_DOCUMENT){

  2....

  3.if(type==Xml.END_TAG&&name.equals("address")){

  4.return;

  5.}

  6....

  7.ParseEventnext=parser.read();

  8.

  9.//ifitsnotatexteventthenskipit

  10.if(next.getType()!=Xml.TEXT){

  11.continue;

  12.}

  13....

  14.System.err.println(name+":"+text);

  下面的这段代码在"parseAddressTag"中轮回,直到找到与<address>对应的停止标志。假如它碰到别的任何标志,那末标志名和标志内容就会被打印到把持台上。因而,假如找到标志<name>RobertCadena</name>,你将看到上面的把持台输入:
name:RobertCadena

  一旦找到<address>的停止标志(8-10行),控件被前往挪用函数,然后又入手下手查找<address>。

  如你所见,利用Pull语法剖析程序十分简单,而且可以传送语法剖析程序到另外一个函数,然后在文档中查找元素。你其实不范围于剖析资本文件;你还可使用HttpConnection把这个函数传送到httpInputStream。这把你从读取InputStream、保留内容、剖析内容等操纵中束缚了出来,统统都由KXML为你完成。

  DOM处置

  Pull语法剖析出格合用于当你必要保护十分小的存储空间的时分,由于收回事务的文档只要一部分存在于内存中。换句话说,假如你感乐趣的特定命据段是文档中部的几百个字节,那末后面的几百个字节就不用保留在内存中了。

  可是假如你可以节俭一些内存,你可使用另外一个版本的KXML语法剖析程序,它包括对DOM的撑持。DOM是保留在内存中的全部文档树,每一个标志都被分别成节点(Node)对象。你能够遍历这个文档树,然后依据必要获得数据。

  工程中的另外一个MIDlet,KXMLDemo_dom,做了一样的事变。它读取一个通信录,然后把内容打印到把持台,可是此次它利用了DOM。上面给出源代码中对照主要的几行.

  1.Documentdoc=newDocument();

  2....

  3.parser=newXmlParser(isr);

  4.doc.parse(parser);

  第一行创立了一个文档,保留XML树。第三行从一个名为isr的InputStreamReader中创立一个KXML语法剖析程序。第四行传送这个语法剖析程序到文档,然后让文档入手下手剖析。XML被递回剖析,直到抵达文档的开头。当剖析挪用加入时,全部文档被装进内存,这时候你就能够操纵它了。

  1.Elementroot=doc.getRootElement();

  2.intchild_count=root.getChildCount();

  3....

  4.for(inti=0;i<child_count;i++){

  5....

  6.Elementkid=root.getElement(i);

  7.

  8.if(!kid.getName().equals("address")){

  9.continue;

  10.}

  由于我们晓得<address>元素是根元素的间接子元素,我们能够遍历根元素的子元素,寻觅address标志,假如子元素不是一个address标志,则前往。

  1.intaddress_item_count=kid.getChildCount();

  2.

  3.for(intj=0;j<address_item_count;j++){

  4....

  假如我们找到了address子元素,我们入手下手遍历它的子元素,并把这些子元素的内容打印出来。不幸的是,你不克不及只是利用kid.getElement("name"),由于假如这个元素不存在的话,那末你将失掉一个RuntimeException。以是我倡议只要当你晓得XML文档中存在你一切必要的一切字段时才利用这个办法。

  反省你的内存

  依据履历,当你不克不及确保你的使用程序的布局,而且你必要坚持内存被占用情形较低时,你应当利用Pull语法剖析程序。当你有充足内存而且大概必要经由过程增加或挪动标志的体例操纵文档时,可使用DOM。

  假如你想看看这两种办法利用内存的情形,在KtoolBar中翻开工程,利用内存监督器(Edit-->Preferences:MonitoringTag)。当你运转MIDlet,你将看到内存监控窗口弹出,有图形和数字暗示内存的利用情形。运转每个使用程序,然后察看绿线上升,这暗示你的使用程序损耗的内存量。你将看到Pull使用程序比DOM使用程序利用内存少一些。固然本例中的两个MIDlet之间的区分不长短常年夜,可是假如一个MIDlet用DOM体例遍历一个更年夜的文件,那末它将损耗更多内存。
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,netbeans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。
若天明 该用户已被删除
沙发
发表于 2015-1-20 17:29:43 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
变相怪杰 该用户已被删除
板凳
发表于 2015-1-26 22:21:01 来自手机 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
因胸联盟 该用户已被删除
地板
发表于 2015-1-28 11:20:24 来自手机 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
老尸 该用户已被删除
5#
发表于 2015-2-5 19:01:50 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
飘飘悠悠 该用户已被删除
6#
发表于 2015-2-9 23:54:47 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
再现理想 该用户已被删除
7#
发表于 2015-2-27 01:29:59 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
小魔女 该用户已被删除
8#
发表于 2015-3-4 11:49:55 | 只看该作者
你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
兰色精灵 该用户已被删除
9#
发表于 2015-3-11 19:20:31 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
分手快乐 该用户已被删除
10#
发表于 2015-3-19 09:15:10 | 只看该作者
是一种为 Internet发展的计算机语言
11#
发表于 2015-3-27 17:08:39 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 13:04

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表