J2ME学习笔记(七)-----J2ME与XML的集成

J2MEXML的集成

1.        XML(Extensible Markup Language)可扩展标记语言----- XML独立于硬件和软件,XML文件和HTML文件一样,实际上是一个文本文件。创建XML文件最普通的工具和HTML一样,就是记事本了。除了记事本之外,当然还有一些更加方便的工具,如XML NotepadXML ProCLIPXML SPY等,这些工具的一大特点是:能够检查你所建立的XML文件是否符合XML规范。

 

2.        为了访问XML文件,J2ME工具箱必须包含一个XML分析程序,适用于移动设备的XML分析程序优势在于:不用消耗大量的内存(占用内存较少).

 

3.        适用于移动设备的XML分析程序有以下几种:(XML分析程序需要从Internet上下载)

KXML  MinXML  NanoXML   TinyXML

 

4.        分析XML文件有两种方法:基于事件的和基于树的。

基于事件的XML分析程序-----单独分析XML文件中的每个元素,并通过回调方法把分析的数据送到MIDlet应用。

基于树的XML分析程序-----相反读入整个XML文件到一种内部的树结构,把此文件存储在移动设备的内存中,缺点是带来设备上很大的内存开销,优点是快而方便地导航和操纵已分析的数据。

 

5.        一个实例-----用基于树的XML分析程序连接MIDletXML文件

1)      首先需要一个TinyXML分析程序,可从Internet上下载,该程序是一个.jar的包,实际上就是一个java的类库(很小15KB)

2)      下载完后把TinyXML分析程序放到X:/WTK104/apps/ProjectName/lib中。

3)      XML文件内容如下:

<?xml version="1.0" ?>

<mail>

       <From>Developer</From>

       <To>Students</To>

       <Cc>Faculty</Cc>

       <Date>30 </Date>

       <Subject>Integration</Subject>

       <Body Language="English">

              This is J2ME!!!!!!

       </Body>

</mail>

另存为mail.xml,你也可以使用自己的XML文件-----把该文件放如J2EE服务器的public_html文件夹中。

 

4)      MIDlet应用代码如下:

import java.io.*;

import java.util.*;

import java.lang.String;

import javax.microedition.lcdui.*;

import javax.microedition.io.*;

import javax.microedition.midlet.*;

//下面两个包出现在XML分析程序tinyTreeDemo

import gd.xml.*;

import gd.xml.tiny.*;

 

public class tinyTreeDemo extends MIDlet implements CommandListener

{

       private String url;

       private ParsedXML root;

      

       private Display myDisplay=null;

       private Form mainScreen;

       private TextField requestField;

      

       Command sendCommand=new Command("SEND",Command.OK,1);

      

       public tinyTreeDemo()

       {

              //放置mail.xml文件的Web站点

              url="http://127.0.0.1:8000/mail.xml";

              myDisplay=Display.getDisplay(this);

              mainScreen=new Form("Type a URL:");

              requestField=new TextField(null,url,100,TextField.URL);

              mainScreen.append(requestField);

              mainScreen.addCommand(sendCommand);

              mainScreen.setCommandListener(this);

       }

      

       public void startApp() throws MIDletStateChangeException

       {

              myDisplay.setCurrent(mainScreen);

       }

      

       public void pauseApp()

       {

             

       }

      

       public void destroyApp(boolean unconditional)

       {

             

       }

      

       public void commandAction(Command c,Displayable s)

       {

              if(c==sendCommand)

              {

                     String urlString=requestField.getString();

                     try

                     {

                            //返回XML根元素

                            root=TinyParser.parseXML(url);

                            displayNode(root);

                     }

                     catch(ParseException e)

                     {

                            System.err.println("startApp:" + e);

                     }

              }

       }

      

       private void displayNode(ParsedXML px)

       {

              //返回节点对象类型

              String nodeName=px.getTypeName();

              //返回节点对象类型+名称,例如tag<mail>, tag为类型(标签)mail为节点名

              if(px.getName()!=null)

                     nodeName+="<" + px.getName() + ">";

                     //返回存储在标签之间的内容

              String nodeContent=px.getContent();

              if(nodeContent==null)

                     nodeContent="";

                     //在控制台中打印出来

              System.out.println(nodeName + ":");

              System.out.println(nodeContent);

             

              Enumeration e;

              //返回属性,如果有就存储在Enumeration

              e=px.attributes();

              if(e.hasMoreElements())

              {

                     System.out.print("attribute:");

                     while(e.hasMoreElements())

                     {

                            //返回属性名称

                            String attrName=(String)e.nextElement();

                            //px.getAttribute(attrName)返回属性的值

                            System.out.println(attrName + ":" + px.getAttribute(attrName));

                           

                     }

              }

              //返回节点中的元素,如果有就存储在Enumeration

              e=px.elements();

              if(e.hasMoreElements())

              {

                     //显示下一个节点

                     while(e.hasMoreElements())

                            displayNode((ParsedXML)e.nextElement());

              }

       }

}

另存为tinyTreeDemo.java

5)      编译---预检验----测试(J2EE服务器需开启)

结果如下,控制台显示如下信息----

root:

 

tag<mail>:

 

tag<From>:

 

text:

Developer

tag<To>:

 

text:

Students

tag<Cc>:

text:

Faculty

tag<Date>:

 

text:

30

tag<Subject>:

 

text:

Integration

tag<Body>:

 

attribute:Language:English

text:

This is J2ME!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值