J2ME中KXML与NanoXML解析XML总结

       要使用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应用程序非常适合。

      原文出处: http://www.blogjava.net/improviser/archive/2009/02/25/256533.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值