设为首页收藏本站language 语言切换
查看: 1301|回复: 0
收起左侧

专家分享:J2ME中KXML与NanoXML解析XML总结

[复制链接]
发表于 2010-2-20 13:19:25 | 显示全部楼层 |阅读模式
<p >XML全称为EXtensible Markup Language,中文称为可扩展标记语言,是一种计算机所能理解的信息符号语言。计算机之间可以通过此种标记语言处理包含各种信息的文章等功能。由于XML是一种允许相关人士自由决定的标记语言,所以称语言的可扩展性。XML作为一个标准,而且由于XML是一种纯文本格式存储文件,从而使得XML本身具备了很好的跨平台的特点,因此被广泛应用于网络数据交换的各个领域,包括网络通讯、不同程序语言平台之间的数据交流等方面。<p >要使用XML作为网络中传输通讯,势必在传输双方的发送方跟接收端都具备对XML文件的解析能力才能实现正常的数据交换并完成通讯过程。由于在移动设备硬件中的CPU跟内存的不足,跟网络传输速率的欠缺,而且解析XML需要消耗更多的资源,因此使得XML在移动设备中的使用收到了限制,在更多时候我们采用的是采用基于基本数据流的形式(如J2ME中的DataInputStream和DataOutputStream)在读取和发送数据。然而,随着智能手机硬件的提高跟普及以及3G网络的落实,使得在不久我们将能无顾虑地在移动通讯中使用XML了。<p >在J2ME体系中,对xml的解析有比较有名的第三方解析API,分别为KXML和NanoXML,他们都提供了对解析xml的支持。KXML在解析XML过程中会对文件内容一层一层进行解析,因此成为增量式解析器,比较适合大文件的解析。而NanoXML是一次性解析器,在一次时间里就把整个xml文档解析完,因此不适合大文件的解析,会造成内存不足的现象。有关这两种解析器网上都有介绍过,在这里对它们的使用进行总结。<p ><b>一、创建实例对象</b><p >1、使用NanoXML时由于是一次性机制,因此将xml数据流一次性封装创建解析实例对象kXMLElement<p >    /**<p >    HttpConnection conn;<p >    String xml;<p >    Reader r;<p >    */<p >     //......获取网络连接对象或者其他形式数据对象<p > InputStreamReader isrDoc =<p > new InputStreamReader(conn.openInputStream());//获取输入流,这里以HttpConnection为例<p > kXMLElement kXMLeroot = new kXMLElement();//创建实例对象<p > try {<p >  kXMLeroot.parseFromReader(isrDoc);<p > }<p > catch( kXMLParseException kpe ){<p >          kpe.printStackTrace();<p > }<p > catch( IOException ie ){<p >          ie.printStackTrace();<p >    }<p ><p >    2、使用kxml时首先需要得到一个XmlParser实例对象,在构造方法中传入Reader参数<p >    /**<p >    HttpConnection conn;<p >    String xml;<p >    Reader r;<p >    */<p >    InputStreamReader isrDoc =<p > new InputStreamReader(conn.openInputStream());//获取输入流,这里以HttpConnection为例<p > XmlParser parser = new XmlParser(isrDoc);//创建实例对象<p ><b>二、KXML解析XML</b><p >    boolean parsing = true;//判断是否到达最后一个document标签<p >    while()<p >    {<p >        ParseEvent event = parser.read();<p >        swith(event.getType())<p >   {<p >        case Xml.START_TAG:<p >         ....//处理开始标签tag<p >         break;<p >         case Xml.END_TAG:<p >         ...//处理结束标签tag<p >         break;<p >         .......//其他标签处理<p >        case Xml.END_DOCUMENT:<p >        ...//最末tag<p >          parsing = false;<p >         break;<p >     }<p >    }<p ><b>三、NanoXML解析XML</b><p >     Vector list = kXMLeroot.getChildren();//获取子节点列表<p >     Vector contents = new Vector();//用于获取节点内容<p >     for(int i = 0; i < list.size(); ++i){<p >   kXMLElement node = (kXMLElement) list.elementAt(i);<p >   String tag = node.getTagName();<p >   if(tag == null) continue;<p >   if(!tag.equals( "item" )) continue;<p >   contents.addElement(node.getContents());<p >   }<p >     String[] contentStrs = new String[contents.size()];//转化为字符串数组<p >NanoXML是一个能在CLDC 环境下运行的开放源代码,NanoXML是非常小(6KB)的一步XML解析器;KXML是一个只占很小存储空间的XML语法分析程序,对于J2ME应用程序非常适合。<p >----------------------------------------------------------------------------------<p >注:本文作者--即兴诗人<p >  原文链接:http://www.blogjava.net/improviser/archive/2009/02/25/256533.html<p >< align=right></P><p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-6 00:47 , Processed in 0.107688 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

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