在J2ME开发中解析XML

Java版手机学生成绩查询项目实战 本文还有配套的精品资源,点击获取 简介:本项目基于Java技术和J2ME平台,实现了一个手机版移动学生成绩查询应用。该应用允许学生方便快捷地查询自己的成绩,源代码展示了如何使用Java编程语言设计和实现移动应用。通过分析源代码,开发者可以学习移动应用开发的各个方面,包括用户界面设计、数据处理、网络通信等,为未来在移动领域的发展奠定基础。 1. Java移动应用开发简介... 阅读详情
        目前,XML已经广泛应用于数据交换领域,xml是基于纯文本的,具有优秀的跨平台特性。本文将讲述如何在J2ME中解析XML进行数据传输。

        XML写法比较简单,而且非常便于人来阅读。但是必须在客户端和服务器端有XML的解析器才可以正常通信,由于初期的移动信息设备内存和处理器上的不足,所以在MIDP1.0中并没有提供对XML的支持。随着内存和处理器的提高,对XML的支持成为了可能。在JSR182中提供了XML的解析器,但是这并不是标准MIDP中的API需要特定的实现才可以支持。幸运的是有第三方的API对解析xml提供了支持,比较有名的是kxml和nanoxml。

        使用XML之前,你必须考虑好是不是必须用它来传输数据,因为解析xml是比较耗费资源的,尤其是在CPU和内存的资源都很宝贵的条件下。如果我们能使用DataInputStream和DataOutputStream传输的话就尽量不要使用XML。XML的解析器有两种,一种是确认性的,他在解析之前会对xml的文档进行有效性的验证,确保这是应用程序需要的。另一种则是非确认性的,他不做验证工作直接进行解析,无疑这样的速度会快。kxml和nanoxml都是这样的解析器。它们也存在差别,kxml是增量解析器他会一点一点的解析,这样在解析大的文档的时候会效率比较高。nanoxml是一步解析器,一次就把文档解析完,如果文档很大的话,这无疑会耗费很大的内存。要使用kxml你可以从http://www.kxml.org 下载得到,在http://nanoxml.sourceforge.net 你可以下载nanoxml。

        要使用kxml,你必须首先得到一个XmlParser实例,它用Reader作为构造器的参数:
try {
    Reader    r = .....;
    XmlParser parser = new XmlParser( r );
}
catch( java.io.IOException e ){
    // handle exception....
}

如果你的xml文档存储在String内的话你可以使用ByteArrayInputStream和InputStreamReader:
String    xml = "<a>some xml</a>";
ByteArrayInputStream bin =
            new ByteArrayInputStream( xml.getBytes() );
XmlParser parser = new XmlParser( new InputStreamReader( bin ) );
当从网上接收数据的时候可以这样:
HttpConnection    conn = .....;
InputStreamReader doc =
         new InputStreamReader( conn.openInputStream() );
XmlParser parser = new XmlParser( doc );
得到parser实例后我们就可以调用read方法进行解析了,read方法会返回一个ParseEvent,通过判断他的类型我们就可以解析xml了。
try {
    boolean keepParsing = true;
       
    while( keepParsing ){
        ParseEvent event = parser.read();
 
        switch( event.getType() ){
            case Xml.START_TAG:
                ..... // handle start of an XML tag
                break;
            case Xml.END_TAG:
                ..... // handle end of an XML tag
                break;
            case Xml.TEXT:
                ..... // handle text within a tag
                break;
            case Xml.WHITESPACE:
                ..... // handle whitespace
                break;
            case Xml.COMMENT:
                ..... // handle comment
                break;
            case Xml.PROCESSING_INSTRUCTION:
                ..... // handle XML PI
                break;
            case Xml.DOCTYPE:
                ..... // handle XML doctype
                break;
            case Xml.END_DOCUMENT:
                ..... // end of document;
                keepParsing = false;
                break;
        }
    }
}
catch( java.io.IOException e ){
}

如果想使用nanoxml,那么你首先要创建一个kXMLElement实例,然后调用parseFromReader、parseString或者parseCharArray。由于他是一步解析器,那么它会把整个文档解析完后生成一个Object tree。每个节点都是一个kXMLElement的实例,通过调用getChildren等方法可以在这棵树上导航。
HttpConnection    conn = .....;
InputStreamReader doc =
         new InputStreamReader( conn.openInputStream() );
kXMLElement       root = new kXMLElement();

try {
    root.parseFromReader( doc );
}
catch( kXMLParseException pe ){
}
catch( IOException ie ){
}

下面是一个J2ME的应用程序简单演示了如何解析xml。如果有时间可以写写复杂的测试程序。你可以从如下地址下载源代码:XMLTest. 里面包括了kxml和nanoxml的源代码,如果想得到最新的源代码请参考他们的官方网站,在本站提供了kxml的在线API
package com.ericgiguere.techtips;

import java.io.*;
import java.util.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import nanoxml.*;
import org.kxml.*;
import org.kxml.parser.*;

/**
 * Simple MIDlet that demonstrates how an XML document can be
 * parsed using kXML or NanoXML.
 */

public class XMLTest extends MIDlet {

    // Our XML document -- normally this would be something you
    // download.
   
    private static String xmlDocument =
        "<list><item>apple</item>" +
              "<item>orange</item>" +
              "<item>pear</item></list>";
             
    private Display display;
    private Command exitCommand = new Command( "Exit",
                                               Command.EXIT, 1 );
                                              
    public XMLTest(){
    }
   
    protected void destroyApp( boolean unconditional )
                       throws MIDletStateChangeException {
        exitMIDlet();
    }
   
    protected void pauseApp(){
    }
   
    protected void startApp() throws MIDletStateChangeException {
        if( display == null ){ // first time called...
            initMIDlet();
        }
    }
   
    private void initMIDlet(){
        display = Display.getDisplay( this );
       
        String [] items;
       
        //items = parseUsingNanoXML( xmlDocument );
        items = parseUsingkXML( xmlDocument );
       
        display.setCurrent( new ItemList( items ) );
    }
   
    public void exitMIDlet(){
        notifyDestroyed();
    }
   
    // Parses a document using NanoXML, looking for
    // "item" nodes and returning their content as an
    // array of strings.
   
    private String[] parseUsingNanoXML( String xml ){
        kXMLElement root = new kXMLElement();
        try {
            root.parseString( xml );
           
            Vector list = root.getChildren();
            Vector items = 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;
               
                items.addElement( node.getContents() );
            }
           
            String[] tmp = new String[ items.size() ];
            items.copyInto( tmp );
            return tmp;
        }
        catch( kXMLParseException ke ){
            return new String[]{ ke.toString() };
        }
    }
   
    // Parses a document using kXML, looking for "item"
    // nodes and returning their content as an
    // array of strings.
   
    private String[] parseUsingkXML( String xml ){
        try {
            ByteArrayInputStream bin =
                            new ByteArrayInputStream(
                                     xml.getBytes() );
            InputStreamReader in = new InputStreamReader( bin );
            XmlParser parser = new XmlParser( in );
            Vector    items = new Vector();
           
            parsekXMLItems( parser, items );
           
            String[] tmp = new String[ items.size() ];
            items.copyInto( tmp );
            return tmp;
        }
        catch( IOException e ){
            return new String[]{ e.toString() };
        }
    }
   
    private void parsekXMLItems( XmlParser parser, Vector items )
                                     throws IOException {
        boolean inItem = false;
       
        while( true ){
            ParseEvent event = parser.read();
            switch( event.getType() ){
                case Xml.START_TAG:
                    if( event.getName().equals( "item" ) ){
                        inItem = true;
                    }
                    break;
                case Xml.END_TAG:
                    if( event.getName().equals( "item" ) ){
                        inItem = false;
                    }
                    break;
                case Xml.TEXT:
                    if( inItem ){
                        items.addElement( event.getText() );
                    }
                    break;
                case Xml.END_DOCUMENT:
                    return;
            }
        }
    }
   
    // Simple List UI component for displaying the list of
    // items parsed from the XML document.
   
    class ItemList extends List implements CommandListener {
   
        ItemList( String[] list ){
            super( "Items", IMPLICIT, list, null );
            addCommand( exitCommand );
            setCommandListener( this );
        }
       
        public void commandAction( Command c, Displayable d ){
            if( c == exitCommand ){
                exitMIDlet();
            }
        }
    }
}


J2ME开发中解析XML J2ME开发中解析XML,J2ME开发中解析XML 立即下载

相关推荐

有限元分析必看:如何用ANSYS检查关键区域的网格质量(附操作截图)

本文聚焦有限元分析中决定仿真精度的关键环节,详细讲解了如何利用ANSYS Workbench对关键区域进行网格质量检查与优化。文章提供了从思维转变、实战操作到指标解读的完整流程,强调通过命名选择、Worksheet过滤器等工具实现定向检查,并给出了针对结构分析的关键区域网格质量阈值建议,帮助工程师提升仿真结果的可靠性与效率。

weixin_29200741的博客 464

J2ME XML解析例子

项目终于告一段落了,在项目中学习了很多新知识,其中xml的解析就是一个,现在把xml知识记录一下。 xml代码 &lt;devices&gt; &lt;!--用于支持Nokia-ui风格手机--&gt; &lt;!--非触屏--&gt; &lt;device&gt; &lt;identifier&gt;Generic/M20C10-x-Nokia&lt;/identifie...

liwy_finder的博客 187

STM32+OV7670实战:5步搞定低成本人脸识别门禁系统(附完整代码)

本文详细介绍了基于STM32单片机和OV7670摄像头构建低成本离线人脸识别门禁系统的完整实战方案。文章从硬件选型、电路设计避坑入手,逐步讲解了图像采集优化、轻量级人脸检测与LBP特征提取策略,并提供了离线人脸库管理、特征比对以及系统集成的具体实现方法,附有核心代码示例,旨在帮助开发者快速实现可落地的嵌入式视觉应用。

kubernetes8ctl的博客 568

J2ME解析并读取xml文件

[color=green]用KXML解析读取xml文本[/color] 首先需要kxml2-2.3.0.jar,可以在我的附件中下载,源代码如下: [img]http://dl.iteye.com/upload/attachment/211767/455090ee-fb60-3445-8ba4-02c7b68b2d72.png[/img] [code="java"] impor...

邪道少年 202

从零到一:R与RStudio的安装与配置全攻略

本文提供了R与RStudio的完整安装与配置指南,涵盖Windows、Mac和Linux三大操作系统。从基础环境搭建到高级性能优化,详细介绍了R语言安装、RStudio配置、项目管理和实用技巧,帮助数据科学初学者快速搭建高效的分析工作环境。

weixin_29062671的博客 419

别急着让AI画板!聊聊Cadence Allegro X AI和OrCAD X在实际PCB项目中的真实体验

本文分享了Cadence Allegro X AI与OrCAD X在PCB设计中的实际应用体验,探讨了AI辅助Layout的效率提升与潜在陷阱。通过高速ADC采集板案例,详细对比了AI与传统方法在电源平面分割、低速信号布线等任务中的表现,并总结了人机协作的最佳实践,为工程师提供实用参考。

weixin_30836759的博客 2201

J2ME中SAX方式解析XML

因为公司需要,刚开始学J2ME,理解的不好的请大家多指教! 解析XML文件的2种方式:SAX和DOM SAX(Simple API for XML)是基于事件的解析XML的一种规范。 SAX的工作原理简单地说就是对文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文本(characters)等地方时通知事件监听器,由事件监听器调用相应的函数做...

CyberWorld 160

Vivado与VCS+Verdi联合仿真环境搭建全攻略

本文详细介绍了如何搭建Vivado与VCS+Verdi联合仿真环境,旨在解决Vivado Simulator在大型FPGA验证中速度慢、调试弱的问题。通过指导工具版本配对、环境变量设置、关键参数配置及Xilinx仿真库编译,帮助工程师高效整合Vivado的设计管理、VCS的高速仿真与Verdi的深度调试能力,从而显著提升验证效率。

weixin_29219189的博客 576

j2me中kxml解析xml实例

        本人研究编写kxml解析xml代码做了两天,虽然实现功能,但解析方法不具有通用性,在网友小俞的帮助下,实现一个通用的解析代码,非常感谢小俞~~~~!import java.io.IOException;import java.io.InputStreamReader;import java.util.Vector;import javax.microed

wenchang4you的专栏 1448

QT+Halcon实现螺纹检测

工业上要检测螺丝的内外直径、内外牙距、内外角度,现在比较好用的图像处理库,开源的opencv,收费的有halcon。为了实现螺纹检测,和对比螺纹检测拿个库比较好。分别用opencv和halcon实现了螺纹检测,通过对比发现用halcon实现的效果比较。现在用博客把实现过程记录下来: 1、需要检测的螺纹数据如下: 2、为了实现检测螺丝以上数据,螺纹内径、螺纹外径、螺纹外牙距、螺纹...

专注现代C++实战,从核心语法到高性能编程,助力开发者深入掌握系统级编程精髓。 7050

AS7341可见光谱传感器原理图设计,已量产(光线传感器)

最近在做便携式环境光光谱检测项目时,我们基于 ams 的 AS7341 搭了一套硬件电路 —— 这颗芯片算是业内新一代的光谱传感 IC,8 个可见光通道 + NIR + 闪烁检测的配置,加上 6 路并行 16 位 ADC,数据吞吐能力确实够顶。今天就拆解下这个模块的硬件设计细节,聊聊实际做板时的那些考量点。

不脱发的程序猿 640

在J2ME开发中解析XML(1)

在J2ME开发中解析XML(1)             目前,XML已经广泛应用于数据交换领域,XML是基于纯文本的,具有优秀的跨平台特性。本文将讲述如何在J2ME中解析XML进行数据传输。     XML写法比较简单,而且非常便于人来阅读。但是必须在客户端和服务器端有XML的解析器才可以正常通信,由于初期的移动信息设备内存和处理器上的不足,所以在MIDP1.0中并没有提供对XML的支持。随

海阔天空 634

使用Python爬虫抓取政府网站政务信息:公告、通知的自动化抓取与分析

通过结合Requests、BeautifulSoup、Selenium等技术,你能够高效地抓取政府网站的数据,并通过MySQL存储与Pandas分析这些数据。通过自动化手段抓取这些信息,不仅可以提高数据收集的效率,还能够实时获取最新的政务动态,为政策研究、舆情分析等提供宝贵数据。我们将通过Python的Requests、BeautifulSoup、Selenium等工具,结合最新的技术实现一个完整的爬虫系统,帮助你轻松抓取并分析政务信息。通过爬虫,我们可以自动化地从指定网站上抓取公告、新闻、通知等信息。

2201_76125261的博客 1907

J2ME Polish 共有 36 个类似项目

http://www.oschina.net/p/j2me+polish/similar_projects?p=2kSOAP2 http://ksoap2.sourceforge.net/ kSOAP 2 是一个手机上的SOAP web service客户端包。主要用于资源受限制的Java环境如Applets或J2ME应用程序(CLDC/ CDC/MIDP)。 kXML http:

况天宝的专栏 2578

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

J2Me HTTP

 其实没啥功能,只是从TOMCAT下得到一个XML并解析一下罢了。 TOMCAT配置相当简单, 1.下载tomcat6.解压缩安装 2.下载Struts官方App (Blank) 3.解压blank.war到tomcat/webapps/下 4.在/webapps/blank下,把index.html删了,修改WEB-INF/web.xml,把welcome-file换成:result.xml  5./web-inf下,新建一个result.xmlChen limit 6.OK,well done。

[roccat-Java专栏] 1089

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android开发库

手机开发开源库: http://www.oschina.net/project/tag/169/mobile-devlibs?lang=0&amp;os=0&amp;sort=view     1、jQuery Mobile    网址:http://jquerymobile.com/     jQuery Mobile 是 jQuery 在手机上和平板设备上的版本。jQuery Mo...

fedora 154

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

一些很特别的J2ME开源项目

StrutsME 一个轻量级的序列化协议,使J2ME客户端能调用Struts Web应用程序。  http://www.strutsme.org/  JsonME 轻量级实现J2ME Json。  http://www.json.org/java/org.json.me.zip  MicroLog 轻量级的LOG  http://microlog.sourceforge.net/snapshot 

创业的程序员 555

一些很特别的J2ME开源项目(转

StrutsME 一个轻量级的序列化协议,使J2ME客户端能调用Struts Web应用程序。 http://www.strutsme.org/ JsonME 轻量级实现J2ME Json。 http://www.json.org/java/org.json.me.zip MicroLog 轻量级的LOG http://microlog.sourceforge.net/snapshot Mobil...

无花的专栏 184

J2ME设备的实际性能(转)

性能标准可以帮助开发者开发出更好的应用程序 摘要 设备的性能可以帮助开发者开发出能让用户有好的体验的应用.了解性能可以帮助开发者了解每种设备的优缺点以及为具体设备开发合适的应用.进行性能测试是从底层来评价设备的.这篇文章是描述的...

cuankuangzhong6373的博客 235

J2ME网络处理

J2ME网络交互之优化: http://fonter.javaeye.com/blog/405137J2ME如何通过cmwap直接访问互连网: http://fonter.javaeye.com/blog/400868 开源一个J2ME解析类(解析HTML,XML,TXT,XHTML,WML) http://fonter.javaeye.com/blog/409830  J

blade2001的专栏 656

[转载]用J2ME开发企业级无线应用

用J2ME开发企业级无线应用系统需求 现场销售人员在与客户洽谈时,需要及时地了解客户和联系人的详细资料,管理相关的商业机会,清楚公司产品的报价、存货等信息,能够方便地进行查询(多条 件)、创建、更新和删除(权限允许)等...

congji3817的博客 124

Eclipes J2ME导入Kxml包异常

今天使用外部包KXML解析xml的时候,在Eclipse中导入Kxml包没有问题,编译也没有问题。但是在运行的时候会出现java.lang.NoClassDefFoundError: org/kxml2/io/KXmlParser这个异常。后来发现在普通的java project中这个类包可以正常引用,但是在J2me Project中会出现这个异常。上网查找有人说可以通过重新编译源代码解决本问

java 827

Kxml2 java.lang.NoClassDefFoundError解决方案

<br />最近在公司在做J2ME的项目,需要解析XML文件,开发环境Eclipse,WTK,使用Kxml解析XML.<br /> <br />刚开始使用Eclipse做Kxml解析XML的时候,总是出现java.lang.NoClassDefFoundError,但是用wtk就不会出现问题,后来总算找到了解决办法,在Eclipse下完美使用Kxml解析XML

JAVA 601
上一篇: 个人网站开通—http://www.j2medev.com
下一篇: 开发J2ME低级联网应用
mingjava
博客等级 码龄24年 68粉丝 114原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值