要使用XML作为网络中传输通讯,势必在传输双方的发送方跟接收端都具备对XML文件的解析能力才能实现正常的数据交换并完成通讯过程。由于在移动设备硬件中的CPU跟内存的不足,跟网络传输速率的欠缺,而且解析XML需要消耗更多的资源,因此使得XML在移动设备中的使用收到了限制,在更多时候我们采用的是采用基于基本数据流的形式(如J2ME中的DataInputStream和DataOutputStream)在读取和发送数据。然而,随着智能手机硬件的提高跟普及以及3G网络的落实,使得在不久我们将能无顾虑地在移动通讯中使用XML了。
在J2ME体系中,对xml的解析有比较有名的第三方解析API,分别为KXML和NanoXML,他们都提供了对解析xml的支持。KXML在解析XML过程中会对文件内容一层一层进行解析,因此成为增量式解析器,比较适合大文件的解析。而NanoXML是一次性解析器,在一次时间里就把整个xml文档解析完,因此不适合大文件的解析,会造成内存不足的现象。有关这两种解析器网上都有介绍过,在这里对它们的使用进行总结。
一、创建实例对象
1、使用NanoXML时由于是一次性机制,因此将xml数据流一次性封装创建解析实例对象kXMLElement
/**
HttpConnection conn;
String xml;
Reader r;
*/
//......获取网络连接对象或者其他形式数据对象
InputStreamReader isrDoc =
new InputStreamReader(conn.openInputStream());//获取输入流,这里以HttpConnection为例
kXMLElement kXMLeroot = new kXMLElement();//创建实例对象
try {
kXMLeroot.parseFromReader(isrDoc);
}
catch( kXMLParseException kpe ){
kpe.printStackTrace();
}
catch( IOException ie ){
ie.printStackTrace();
}
2、使用kxml时首先需要得到一个XmlParser实例对象,在构造方法中传入Reader参数
/**
HttpConnection conn;
String xml;
Reader r;
*/
InputStreamReader isrDoc =
new InputStreamReader(conn.openInputStream());//获取输入流,这里以HttpConnection为例
XmlParser parser = new XmlParser(isrDoc);//创建实例对象
二、KXML解析XML
boolean parsing = true;//判断是否到达最后一个document标签
while()
{
ParseEvent event = parser.read();
swith(event.getType())
{
case Xml.START_TAG:
....//处理开始标签tag
break;
case Xml.END_TAG:
...//处理结束标签tag
break;
.......//其他标签处理
case Xml.END_DOCUMENT:
...//最末tag
parsing = false;
break;
}
}
三、NanoXML解析XML
Vector list = kXMLeroot.getChildren();//获取子节点列表
Vector contents = new Vector();//用于获取节点内容
for(int i = 0; i < list.size(); ++i){
kXMLElement node = (kXMLElement) list.elementAt(i);
String tag = node.getTagName();
if(tag == null) continue;
if(!tag.equals( "item" )) continue;
contents.addElement(node.getContents());
}
String[] contentStrs = new String[contents.size()];//转化为字符串数组
NanoXML是一个能在CLDC 环境下运行的开放源代码,NanoXML是非常小(6KB)的一步XML解析器;KXML是一个只占很小存储空间的XML语法分析程序,对于J2ME应用程序非常适合
本文来自 280文秘网(https://www.it280.com),转载请保留网址和出处
【J2ME中KXML与NanoXML解析XML总结】相关文章:
中国农业银行天津市分行招聘柜员信息5月17日前报名02-10
饱和汽与饱和汽压的定义和汽化的方式02-10
机电销售工作总结范例02-10
2017年安徽进一步规范高中招生行为02-10
地方专项与定向招生的区别在哪里02-10
中国药典2000版二部:胆茶碱02-10
no one与nobody的用法是什么 相关句子整理02-10
2017中国国电龙源电力集团股份有限公司校园招聘7人公告(北京,第二批)02-10
2016年英语六级作文万能模板:分析原因02-10
法语语法:法语语法解析302-10
