J2ME中KXML与NanoXML解析XML总结

XML全称为EXtensible Markup Language,中文称为可扩展标记语言,是一种计算机所能理解的信息符号语言。计算机之间可以通过此种标记语言处理包含各种信息的文章等功能。由于XML是一种允许相关人士自由决定的标记语言,所以称语言的可扩展性。XML作为一个标准,而且由于XML是一种纯文本格式存储文件,从而使得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应用程序非常适合。

时间: 2024-11-02 23:41:24

J2ME中KXML与NanoXML解析XML总结的相关文章

Android中使用PULL方式解析XML文件深入介绍_Android

一.基本介绍 Android中极力推荐xmlpull方式解析xml. xmlpull不仅可用在Android上同样也适用于javase,但在javase环境中需自己获取xmlpull所依赖的类库,kxml2-2.3.0.jar,xmlpull_1_1_3_4c.jar. jar包下载网址 http://www.xmlpull.org/ http://kxml.sourceforge.net/ 二.例子 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 E

javascript中加载并解析XML字符串/xml文件

首先,我们需要加载这个xml文件,js中加载xml文件,是通过XMLDOM来进行的.  代码如下 复制代码 <?xml version="1.0" encoding="utf-8" ?> <DongFang>   <Company>     <cNname>1</cNname>     <cIP>1</cIP>   </Company>   <Company>

Android应用中使用DOM方式解析XML格式数据的基本方法_Android

DOM比SAX更容易掌握,因为她没有涉及回调和复杂的状态管理,然而,DOM的实现常常将所有的XML节点保存在内存中,这样使的处理较大的文档效率低. XML基本的节点类型 node - DOM基本的数据类型 Element - 最主要处理的对象是Element Attr - 元素的属性 Text - 一个Element 或者Attr的实际内容 Document - 代表整个XML文档,一个Document对象通常也称为一颗DOM树   1.在src目录下新建一个android.xml <?xml

Android应用中使用DOM方式解析XML格式数据的基本方法

DOM比SAX更容易掌握,因为她没有涉及回调和复杂的状态管理,然而,DOM的实现常常将所有的XML节点保存在内存中,这样使的处理较大的文档效率低. XML基本的节点类型 node - DOM基本的数据类型 Element - 最主要处理的对象是Element Attr - 元素的属性 Text - 一个Element 或者Attr的实际内容 Document - 代表整个XML文档,一个Document对象通常也称为一颗DOM树   1.在src目录下新建一个android.xml <?xml

J2ME中RMS的使用解析

在J2ME中,RMS作为唯一的永久性存储工具,其重要性是不言而喻的.但是很多刚刚开始学习J2ME的新人总是抱怨在这方面的资料很少,或者是针对性不强.因此,我想把自己在这方面的一些学习心得和大家交流一下. RMS即Record Manager System,在手机应用中常常作为得分记录.游戏信息存储等的工具使用. RMS的使用可以分为两个部分:一.单一记录的构造:二.RecordStore的使用和操作.下面就这两方面进行详细说明. 一.单一记录的构造.我们在存储记录时可能需要记录很多相似的条目,在

php中SimpleXML生成与解析xml文件

例,生成xml文档  代码如下 复制代码 class SimpleXMLExtended extends SimpleXMLElement {   public function addCData($cdata_text) {     $node = dom_import_simplexml($this);     $no   = $node->ownerDocument;     $node->appendChild($no->createCDATASection($cdata_tex

PHP中DOMDocument生成与解析XML格式数据

数组  代码如下 复制代码 $arr[] = array( 'name' => $row['name'], 'sex' => $row['sex'], 'age' => $row['age'] ); 生成php  代码如下 复制代码 $doc = new DOMDocument('1.0', 'utf-8'); // 声明版本和编码 $doc->formatOutput = true; $r = $doc->createElement("root"); $

实例解析Ruby程序中调用REXML来解析XML格式数据的用法_ruby专题

REXML 是由 Sean Russell 编写的库.它不是 Ruby 的唯一 XML 库,但它是很受欢迎的一个,并且是用纯 Ruby 编写( NQXML 也是用 Ruby 编写的, 但 XMLParser 封装了用 C 编写的 Jade 库). 在他的 REXML 概述中,Russell 评论道: 我有这样的问题:我不喜欢令人困惑的 API.有几种用于 Java 实现的 XML 解析器 API.其中大多数都遵循 DOM 或 SAX,并且在基本原理上与不断出现的众多 Java API 非常相似.

javascript中XMLDOM和parseXML解析xml实现代码

通常我们有如下的需求: 第一步: 我们可以定义一个方法:(只用有人调用,就直接返回解析器)    代码如下 复制代码 function parseXML(file){    try //Internet Explorer---ie浏览器的解析器创建方式如下:    {     xmlDoc = new ActiveXObject("Microsoft.XMLDOM");    }    catch (e) {     try //Firefox, Mozilla, Opera, etc